Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernd Hufmann2019-06-05 14:28:17 +0000
committerGeneviève Bastien2019-06-06 02:08:19 +0000
commitb914fe541f56fa884146f1566506dbd9a0412f5f (patch)
treea842ec02fab2f697681af45187ead792d0a9f732
parentfecc2baea29ed94242636c7165e5e754c3a161b1 (diff)
parent04a3681ac281092e31e202d796f583eed8d013dd (diff)
downloadorg.eclipse.tracecompass.incubator-b914fe541f56fa884146f1566506dbd9a0412f5f.tar.gz
org.eclipse.tracecompass.incubator-b914fe541f56fa884146f1566506dbd9a0412f5f.tar.xz
org.eclipse.tracecompass.incubator-b914fe541f56fa884146f1566506dbd9a0412f5f.zip
Merge branch 'trace-server' into master
Update with current Trace Compass API: * filter predicates as Multimap<String, Object> instead of Multimap<String, String>) * Update scripting data provider Change-Id: Ie94252c21ee3530bd0b6dac559c949e5a487de84 Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com> Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
-rw-r--r--analyses/org.eclipse.tracecompass.incubator.kernel.core/src/org/eclipse/tracecompass/incubator/internal/kernel/core/fileaccess/FileAccessDataProvider.java64
-rw-r--r--analyses/org.eclipse.tracecompass.incubator.kernel.ui/src/org/eclipse/tracecompass/incubator/internal/kernel/ui/views/fileaccess/FileAccessByFileView.java4
-rw-r--r--analyses/org.eclipse.tracecompass.incubator.scripting.core.tests/testfiles/scripts/dpWithArrow.js4
-rw-r--r--analyses/org.eclipse.tracecompass.incubator.scripting.core/src/org/eclipse/tracecompass/incubator/internal/provisional/scripting/core/data/provider/DataProviderScriptingModule.java7
-rw-r--r--analyses/org.eclipse.tracecompass.incubator.scripting.core/src/org/eclipse/tracecompass/incubator/internal/scripting/core/data/provider/ScriptedTimeGraphDataProvider.java98
-rw-r--r--callstack/org.eclipse.tracecompass.incubator.callstack.core.tests/src/org/eclipse/tracecompass/incubator/callstack/core/tests/flamechart/FlameChartDataProviderTest.java139
-rw-r--r--callstack/org.eclipse.tracecompass.incubator.callstack.core/.settings/org.eclipse.jdt.core.prefs2
-rw-r--r--callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartArrowProvider.java8
-rw-r--r--callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartDataProvider.java97
-rw-r--r--callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartEntryModel.java5
-rw-r--r--callstack/org.eclipse.tracecompass.incubator.callstack.ui/src/org/eclipse/tracecompass/incubator/internal/callstack/ui/views/flamechart/FlameChartPresentationProvider.java4
-rw-r--r--callstack/org.eclipse.tracecompass.incubator.callstack.ui/src/org/eclipse/tracecompass/incubator/internal/callstack/ui/views/flamechart/FlameChartView.java28
-rw-r--r--common/org.eclipse.tracecompass.incubator.target/tracecompass-incubator-master.target2
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/META-INF/MANIFEST.MF1
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/DataProviderServiceTest.java53
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/ExperimentManagerServiceTest.java2
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/XmlManagerServiceTest.java14
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/AbstractModelStub.java8
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/DataProviderDescriptorStub.java137
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/ExperimentModelStub.java3
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/TraceModelStub.java7
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/utils/RestServerTest.java108
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/model/views/Filter.java104
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/model/views/QueryParameters.java57
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/DataProviderService.java443
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/ExperimentManagerService.java8
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/FilterService.java102
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/TraceManagerService.java26
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/DataProviderDescriptorSerializer.java50
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/SeriesModelSerializer.java50
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/TraceSerializer.java3
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/WebApplication.java10
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/XYModelSerializer.java48
-rw-r--r--trace-server/org.eclipse.tracecompass.incubator.trace.server.product/pom.xml120
-rw-r--r--trace-server/pom.xml2
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.opentracing.core/src/org/eclipse/tracecompass/incubator/internal/opentracing/core/analysis/spanlife/SpanLifeDataProvider.java56
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.opentracing.core/src/org/eclipse/tracecompass/incubator/internal/opentracing/core/analysis/spanlife/SpanLifeEntryModel.java2
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.opentracing.ui/src/org/eclipse/tracecompass/incubator/internal/opentracing/ui/view/spanlife/SpanLifePresentationProvider.java3
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/connections/RosConnectionsDataProvider.java47
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/messageflow/RosMessageFlowDataProvider.java78
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/nodes/RosNodesDataProvider.java45
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/queues/RosQueuesDataProvider.java47
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/tasks/RosTasksDataProvider.java47
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/timers/RosTimersDataProvider.java47
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/ContextTest.java18
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/ObjectLifeAnalysisTest.java30
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/analysis/context/ContextDataProvider.java33
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/analysis/objectlife/ObjectLifeDataProvider.java34
-rw-r--r--tracetypes/org.eclipse.tracecompass.incubator.traceevent.ui/src/org/eclipse/tracecompass/incubator/internal/traceevent/ui/markers/ContextMarkers.java23
49 files changed, 1758 insertions, 570 deletions
diff --git a/analyses/org.eclipse.tracecompass.incubator.kernel.core/src/org/eclipse/tracecompass/incubator/internal/kernel/core/fileaccess/FileAccessDataProvider.java b/analyses/org.eclipse.tracecompass.incubator.kernel.core/src/org/eclipse/tracecompass/incubator/internal/kernel/core/fileaccess/FileAccessDataProvider.java
index d2cf6e14a..1904e4467 100644
--- a/analyses/org.eclipse.tracecompass.incubator.kernel.core/src/org/eclipse/tracecompass/incubator/internal/kernel/core/fileaccess/FileAccessDataProvider.java
+++ b/analyses/org.eclipse.tracecompass.incubator.kernel.core/src/org/eclipse/tracecompass/incubator/internal/kernel/core/fileaccess/FileAccessDataProvider.java
@@ -20,9 +20,9 @@ import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;
-import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate;
import java.util.regex.Pattern;
@@ -37,12 +37,13 @@ import org.eclipse.tracecompass.incubator.internal.kernel.core.fileaccess.FileEn
import org.eclipse.tracecompass.incubator.internal.kernel.core.filedescriptor.FileDescriptorStateProvider;
import org.eclipse.tracecompass.incubator.internal.kernel.core.filedescriptor.ThreadEntryModel;
import org.eclipse.tracecompass.incubator.internal.kernel.core.filedescriptor.TidTimeQueryFilter;
-import org.eclipse.tracecompass.internal.tmf.core.model.filters.TimeGraphStateQueryFilter;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.internal.tmf.core.model.timegraph.AbstractTimeGraphDataProvider;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.AttributeNotFoundException;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.model.CommonStatusMessage;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
@@ -50,14 +51,16 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
-import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
import com.google.common.collect.TreeMultimap;
@@ -97,8 +100,15 @@ public class FileAccessDataProvider extends AbstractTimeGraphDataProvider<@NonNu
super(trace, analysisModule);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
+ }
+
+ @Override
+ public TmfModelResponse<List<ITimeGraphArrow>> fetchArrows(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
@@ -108,7 +118,11 @@ public class FileAccessDataProvider extends AbstractTimeGraphDataProvider<@NonNu
}
@Override
- protected @Nullable List<ITimeGraphRowModel> getRowModel(ITmfStateSystem ss, SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @Nullable TimeGraphModel getRowModel(ITmfStateSystem ss, Map<String, Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(parameters);
+ if (filter == null) {
+ return null;
+ }
TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(),
Comparator.comparing(ITmfStateInterval::getStartTime));
Map<@NonNull Long, @NonNull Integer> entries = getSelectedEntries(filter);
@@ -116,19 +130,19 @@ public class FileAccessDataProvider extends AbstractTimeGraphDataProvider<@NonNu
/* Do the actual query */
for (ITmfStateInterval interval : ss.query2D(entries.values(), times)) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
intervals.put(interval.getAttribute(), interval);
}
- Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull String>>> predicates = new HashMap<>();
- if (filter instanceof TimeGraphStateQueryFilter) {
- TimeGraphStateQueryFilter timeEventFilter = (TimeGraphStateQueryFilter) filter;
- predicates.putAll(computeRegexPredicate(timeEventFilter));
+ Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates = new HashMap<>();
+ Multimap<@NonNull Integer, @NonNull String> regexesMap = DataProviderParameterUtils.extractRegexFilter(parameters);
+ if (regexesMap != null) {
+ predicates.putAll(computeRegexPredicate(regexesMap));
}
List<@NonNull ITimeGraphRowModel> rows = new ArrayList<>();
for (Map.Entry<@NonNull Long, @NonNull Integer> entry : entries.entrySet()) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
List<ITimeGraphState> eventList = new ArrayList<>();
@@ -162,7 +176,7 @@ public class FileAccessDataProvider extends AbstractTimeGraphDataProvider<@NonNu
rows.add(new TimeGraphRowModel(entry.getKey(), eventList));
}
- return rows;
+ return new TimeGraphModel(rows);
}
@Override
@@ -170,9 +184,20 @@ public class FileAccessDataProvider extends AbstractTimeGraphDataProvider<@NonNu
return false;
}
+ @Deprecated
@Override
public TmfModelResponse<Map<String, String>> fetchTooltip(SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
+
+ @Override
+ public TmfModelResponse<Map<String, String>> fetchTooltip(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
ITmfStateSystem ss = getAnalysisModule().getStateSystem();
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(fetchParameters);
+ if (filter == null) {
+ return new TmfModelResponse<>(null, ITmfResponse.Status.FAILED, CommonStatusMessage.INCORRECT_QUERY_PARAMETERS);
+ }
Collection<@NonNull Integer> quarks = getSelectedEntries(filter).values();
Map<String, String> retMap = new LinkedHashMap<>();
@@ -183,8 +208,8 @@ public class FileAccessDataProvider extends AbstractTimeGraphDataProvider<@NonNu
long start = filter.getStart();
if (ss == null || quarks.size() != 1 || !getAnalysisModule().isQueryable(start)) {
/*
- * We need the ss to query, we should only be querying one attribute and the
- * query times should be valid.
+ * We need the ss to query, we should only be querying one attribute
+ * and the query times should be valid.
*/
return new TmfModelResponse<>(retMap, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
@@ -198,7 +223,8 @@ public class FileAccessDataProvider extends AbstractTimeGraphDataProvider<@NonNu
}
int parentQuark = ss.getParentAttributeQuark(quark);
if (parentQuark == resQuark) {
- // This is a file name, add the number of opened fd and full file name
+ // This is a file name, add the number of opened fd and full
+ // file name
String fileName = ss.getAttributeName(quark);
retMap.put("File Name", fileName); //$NON-NLS-1$
Object value = current.getValue();
@@ -230,8 +256,10 @@ public class FileAccessDataProvider extends AbstractTimeGraphDataProvider<@NonNu
@Override
- protected List<TimeGraphEntryModel> getTree(ITmfStateSystem ss, TimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected TmfTreeModel<TimeGraphEntryModel> getTree(ITmfStateSystem ss, Map<String, Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
Collection<Integer> selectedTids = Collections.emptySet();
+ // TODO Why not SelectionTimeQueryFilter ?
+ TimeQueryFilter filter = FetchParametersUtils.createTimeQuery(parameters);
if (filter instanceof TidTimeQueryFilter) {
selectedTids = ((TidTimeQueryFilter) filter).getTids();
}
@@ -245,7 +273,7 @@ public class FileAccessDataProvider extends AbstractTimeGraphDataProvider<@NonNu
Activator.getInstance().logError(e.getMessage(), e);
}
- return builder.build();
+ return new TmfTreeModel<>(Collections.emptyList(), builder.build());
}
private void addResources(ITmfStateSystem ss, Builder<@NonNull TimeGraphEntryModel> builder, int quark, long parentId, Collection<Integer> filter) {
@@ -368,8 +396,8 @@ public class FileAccessDataProvider extends AbstractTimeGraphDataProvider<@NonNu
}
@Override
- public @NonNull Multimap<@NonNull String, @NonNull String> getFilterData(long entryId, long time, @Nullable IProgressMonitor monitor) {
- Multimap<@NonNull String, @NonNull String> data = HashMultimap.create();
+ public @NonNull Multimap<@NonNull String, @NonNull Object> getFilterData(long entryId, long time, @Nullable IProgressMonitor monitor) {
+ Multimap<@NonNull String, @NonNull Object> data = HashMultimap.create();
data.putAll(super.getFilterData(entryId, time, monitor));
SelectionTimeQueryFilter filter = new SelectionTimeQueryFilter(Collections.singletonList(time), Collections.singleton(Objects.requireNonNull(entryId)));
diff --git a/analyses/org.eclipse.tracecompass.incubator.kernel.ui/src/org/eclipse/tracecompass/incubator/internal/kernel/ui/views/fileaccess/FileAccessByFileView.java b/analyses/org.eclipse.tracecompass.incubator.kernel.ui/src/org/eclipse/tracecompass/incubator/internal/kernel/ui/views/fileaccess/FileAccessByFileView.java
index 26e9034c9..2f20a373c 100644
--- a/analyses/org.eclipse.tracecompass.incubator.kernel.ui/src/org/eclipse/tracecompass/incubator/internal/kernel/ui/views/fileaccess/FileAccessByFileView.java
+++ b/analyses/org.eclipse.tracecompass.incubator.kernel.ui/src/org/eclipse/tracecompass/incubator/internal/kernel/ui/views/fileaccess/FileAccessByFileView.java
@@ -42,6 +42,7 @@ import org.eclipse.tracecompass.incubator.internal.kernel.core.filedescriptor.Th
import org.eclipse.tracecompass.incubator.internal.kernel.core.filedescriptor.TidTimeQueryFilter;
import org.eclipse.tracecompass.incubator.internal.kernel.ui.Activator;
import org.eclipse.tracecompass.internal.analysis.os.linux.ui.actions.FollowThreadAction;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderManager;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
@@ -244,7 +245,8 @@ public class FileAccessByFileView extends BaseDataProviderTimeGraphView {
TimeGraphEntry entry = (TimeGraphEntry) event.getEntry();
ITimeGraphDataProvider<? extends TimeGraphEntryModel> dataProvider = BaseDataProviderTimeGraphView.getProvider(entry);
TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> response = dataProvider.fetchTooltip(
- new SelectionTimeQueryFilter(hoverTime, hoverTime, 1, Collections.singletonList(entry.getModel().getId())), null);
+ FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(hoverTime, hoverTime, 1, Collections.singletonList(entry.getModel().getId()))),
+ null);
Map<@NonNull String, @NonNull String> map = response.getModel();
if (map != null) {
retMap.putAll(map);
diff --git a/analyses/org.eclipse.tracecompass.incubator.scripting.core.tests/testfiles/scripts/dpWithArrow.js b/analyses/org.eclipse.tracecompass.incubator.scripting.core.tests/testfiles/scripts/dpWithArrow.js
index f0138a105..1429ef369 100644
--- a/analyses/org.eclipse.tracecompass.incubator.scripting.core.tests/testfiles/scripts/dpWithArrow.js
+++ b/analyses/org.eclipse.tracecompass.incubator.scripting.core.tests/testfiles/scripts/dpWithArrow.js
@@ -177,13 +177,13 @@ function prepareTimeGraph() {
prepareTimeGraph();
// A function used to return the entries to the data provider. It receives the filter in parameter, which contains the requested time range and any additional information
-function getEntries(filter) {
+function getEntries(parameters) {
// The list is static once built, return all entries
return tgEntries.getList();
}
// A function used to return the arrows to the data provider. It receives the filter in parameter, which contains the requested time range and any additional information
-function getArrows(filter) {
+function getArrows(parameters) {
// Just return all the arrows, the view will take those in the range
return tgArrows.getList();
}
diff --git a/analyses/org.eclipse.tracecompass.incubator.scripting.core/src/org/eclipse/tracecompass/incubator/internal/provisional/scripting/core/data/provider/DataProviderScriptingModule.java b/analyses/org.eclipse.tracecompass.incubator.scripting.core/src/org/eclipse/tracecompass/incubator/internal/provisional/scripting/core/data/provider/DataProviderScriptingModule.java
index 5960ce167..cbba9e445 100644
--- a/analyses/org.eclipse.tracecompass.incubator.scripting.core/src/org/eclipse/tracecompass/incubator/internal/provisional/scripting/core/data/provider/DataProviderScriptingModule.java
+++ b/analyses/org.eclipse.tracecompass.incubator.scripting.core/src/org/eclipse/tracecompass/incubator/internal/provisional/scripting/core/data/provider/DataProviderScriptingModule.java
@@ -28,7 +28,6 @@ import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.output.DataDriven
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystemBuilder;
import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue;
-import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphDataProvider;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphEntryModel;
@@ -192,9 +191,9 @@ public class DataProviderScriptingModule {
*/
@WrapToScript
public ITimeGraphDataProvider<ITimeGraphEntryModel> createScriptedTimeGraphProvider(ScriptedAnalysis analysis,
- Function<TimeQueryFilter, @Nullable List<ITimeGraphEntryModel>> entryMethod,
- @Nullable Function<TimeQueryFilter, @Nullable List<ITimeGraphRowModel>> rowModelMethod,
- @Nullable Function<TimeQueryFilter, @Nullable List<ITimeGraphArrow>> arrowMethod) {
+ Function<Map<String, Object> , @Nullable List<ITimeGraphEntryModel>> entryMethod,
+ @Nullable Function<Map<String, Object>, @Nullable List<ITimeGraphRowModel>> rowModelMethod,
+ @Nullable Function<Map<String, Object>, @Nullable List<ITimeGraphArrow>> arrowMethod) {
ITimeGraphDataProvider<ITimeGraphEntryModel> provider = new ScriptedTimeGraphDataProvider(analysis, entryMethod, rowModelMethod, arrowMethod);
ScriptingDataProviderManager.getInstance().registerDataProvider(analysis.getTrace(), provider);
return provider;
diff --git a/analyses/org.eclipse.tracecompass.incubator.scripting.core/src/org/eclipse/tracecompass/incubator/internal/scripting/core/data/provider/ScriptedTimeGraphDataProvider.java b/analyses/org.eclipse.tracecompass.incubator.scripting.core/src/org/eclipse/tracecompass/incubator/internal/scripting/core/data/provider/ScriptedTimeGraphDataProvider.java
index d7bba7039..cac48fa7c 100644
--- a/analyses/org.eclipse.tracecompass.incubator.scripting.core/src/org/eclipse/tracecompass/incubator/internal/scripting/core/data/provider/ScriptedTimeGraphDataProvider.java
+++ b/analyses/org.eclipse.tracecompass.incubator.scripting.core/src/org/eclipse/tracecompass/incubator/internal/scripting/core/data/provider/ScriptedTimeGraphDataProvider.java
@@ -10,6 +10,7 @@
package org.eclipse.tracecompass.incubator.internal.scripting.core.data.provider;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
@@ -26,11 +27,12 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.internal.provisional.scripting.core.analysis.ScriptedAnalysis;
import org.eclipse.tracecompass.internal.tmf.core.model.AbstractTmfTraceDataProvider;
-import org.eclipse.tracecompass.internal.tmf.core.model.filters.TimeGraphStateQueryFilter;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.exceptions.TimeRangeException;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.model.CommonStatusMessage;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
@@ -39,8 +41,10 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphDataProvider;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphEntryModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse.Status;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
@@ -66,9 +70,9 @@ public class ScriptedTimeGraphDataProvider extends AbstractTmfTraceDataProvider
private final Map<Long, Integer> fIDToDisplayQuark = new HashMap<>();
private final String fId;
- private final Function<TimeQueryFilter, @Nullable List<ITimeGraphEntryModel>> fEntryMethod;
- private final @Nullable Function<TimeQueryFilter, @Nullable List<ITimeGraphArrow>> fArrowMethod;
- private final @Nullable Function<TimeQueryFilter, @Nullable List<ITimeGraphRowModel>> fRowModelMethod;
+ private final Function<Map<String, Object>, @Nullable List<ITimeGraphEntryModel>> fEntryMethod;
+ private final @Nullable Function<Map<String, Object>, @Nullable List<ITimeGraphArrow>> fArrowMethod;
+ private final @Nullable Function<Map<String, Object>, @Nullable List<ITimeGraphRowModel>> fRowModelMethod;
/**
* Constructor
@@ -83,9 +87,9 @@ public class ScriptedTimeGraphDataProvider extends AbstractTmfTraceDataProvider
* The method to get the arrows
*/
public ScriptedTimeGraphDataProvider(ScriptedAnalysis analysis,
- Function<TimeQueryFilter, @Nullable List<ITimeGraphEntryModel>> entryMethod,
- @Nullable Function<TimeQueryFilter, @Nullable List<ITimeGraphRowModel>> rowModelMethod,
- @Nullable Function<TimeQueryFilter, @Nullable List<ITimeGraphArrow>> arrowMethod) {
+ Function<Map<String, Object>, @Nullable List<ITimeGraphEntryModel>> entryMethod,
+ @Nullable Function<Map<String, Object>, @Nullable List<ITimeGraphRowModel>> rowModelMethod,
+ @Nullable Function<Map<String, Object>, @Nullable List<ITimeGraphArrow>> arrowMethod) {
super(analysis.getTrace());
fSs = Objects.requireNonNull(analysis.getStateSystem(true));
fEntryMethod = entryMethod;
@@ -95,10 +99,10 @@ public class ScriptedTimeGraphDataProvider extends AbstractTmfTraceDataProvider
}
@Override
- public TmfModelResponse<@NonNull List<ITimeGraphEntryModel>> fetchTree(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ public TmfModelResponse<TmfTreeModel<ITimeGraphEntryModel>> fetchTree(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
boolean isComplete = fSs.waitUntilBuilt(0);
- List<ITimeGraphEntryModel> entryList = fEntryMethod.apply(filter);
+ List<ITimeGraphEntryModel> entryList = fEntryMethod.apply(fetchParameters);
if (entryList == null) {
entryList = Collections.emptyList();
}
@@ -109,7 +113,7 @@ public class ScriptedTimeGraphDataProvider extends AbstractTmfTraceDataProvider
}
Status status = isComplete ? Status.COMPLETED : Status.RUNNING;
String msg = isComplete ? CommonStatusMessage.COMPLETED : CommonStatusMessage.RUNNING;
- return new TmfModelResponse<>(entryList, status, msg);
+ return new TmfModelResponse<>(new TmfTreeModel<>(Collections.emptyList(), entryList), status, msg);
}
@Override
@@ -118,36 +122,41 @@ public class ScriptedTimeGraphDataProvider extends AbstractTmfTraceDataProvider
}
@Override
- public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphRowModel>> fetchRowModel(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
- Function<TimeQueryFilter, @Nullable List<ITimeGraphRowModel>> rowModelMethod = fRowModelMethod;
+ public @NonNull TmfModelResponse<TimeGraphModel> fetchRowModel(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
+ Function<Map<String, Object>, @Nullable List<ITimeGraphRowModel>> rowModelMethod = fRowModelMethod;
try {
- List<@NonNull ITimeGraphRowModel> rowModels = (rowModelMethod != null) ? rowModelMethod.apply(filter) : getDefaultRowModels(filter, monitor);
+ List<@NonNull ITimeGraphRowModel> rowModels = (rowModelMethod != null) ? rowModelMethod.apply(fetchParameters) : getDefaultRowModels(fetchParameters, monitor);
if (rowModels == null) {
rowModels = Collections.emptyList();
}
- return new TmfModelResponse<>(rowModels, Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ return new TmfModelResponse<>(new TimeGraphModel(rowModels), Status.COMPLETED, CommonStatusMessage.COMPLETED);
} catch (IndexOutOfBoundsException | TimeRangeException | StateSystemDisposedException e) {
return new TmfModelResponse<>(null, Status.FAILED, CommonStatusMessage.STATE_SYSTEM_FAILED);
}
}
- private @Nullable List<ITimeGraphRowModel> getDefaultRowModels(SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws IndexOutOfBoundsException, TimeRangeException, StateSystemDisposedException {
+ private @Nullable List<ITimeGraphRowModel> getDefaultRowModels(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) throws IndexOutOfBoundsException, TimeRangeException, StateSystemDisposedException {
Map<Integer, ITimeGraphRowModel> quarkToRow = new HashMap<>();
// Get the quarks to display
- for (Long id : filter.getSelectedItems()) {
+ Collection<Long> selectedItems = DataProviderParameterUtils.extractSelectedItems(fetchParameters);
+ if (selectedItems == null) {
+ // No selected items, take them all
+ selectedItems = fIDToDisplayQuark.keySet();
+ }
+ for (Long id : selectedItems) {
Integer quark = fIDToDisplayQuark.get(id);
if (quark != null) {
quarkToRow.put(quark, new TimeGraphRowModel(id, new ArrayList<>()));
}
}
- Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull String>>> predicates = new HashMap<>();
- if (filter instanceof TimeGraphStateQueryFilter) {
- TimeGraphStateQueryFilter timeEventFilter = (TimeGraphStateQueryFilter) filter;
- predicates.putAll(computeRegexPredicate(timeEventFilter));
+ Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates = new HashMap<>();
+ Multimap<@NonNull Integer, @NonNull String> regexesMap = DataProviderParameterUtils.extractRegexFilter(fetchParameters);
+ if (regexesMap != null) {
+ predicates.putAll(computeRegexPredicate(regexesMap));
}
long currentEndTime = fSs.getCurrentEndTime();
- for (ITmfStateInterval interval : fSs.query2D(quarkToRow.keySet(), getTimes(fSs, filter.getTimesRequested()))) {
+ for (ITmfStateInterval interval : fSs.query2D(quarkToRow.keySet(), getTimes(fSs, DataProviderParameterUtils.extractTimeRequested(fetchParameters)))) {
if (monitor != null && monitor.isCanceled()) {
return Collections.emptyList();
}
@@ -182,9 +191,12 @@ public class ScriptedTimeGraphDataProvider extends AbstractTmfTraceDataProvider
return new TimeGraphState(time, duration, Integer.MIN_VALUE);
}
- private static Set<Long> getTimes(ITmfStateSystem key, long[] timesRequested) {
+ private static Set<Long> getTimes(ITmfStateSystem key, @Nullable List<Long> list) {
+ if (list == null) {
+ return Collections.emptySet();
+ }
Set<@NonNull Long> times = new HashSet<>();
- for (long t : timesRequested) {
+ for (long t : list) {
if (key.getStartTime() <= t && t <= key.getCurrentEndTime()) {
times.add(t);
}
@@ -193,12 +205,12 @@ public class ScriptedTimeGraphDataProvider extends AbstractTmfTraceDataProvider
}
@Override
- public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
- Function<TimeQueryFilter, @Nullable List<ITimeGraphArrow>> arrowMethod = fArrowMethod;
+ public @NonNull TmfModelResponse<List<ITimeGraphArrow>> fetchArrows(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
+ Function<Map<String, Object>, @Nullable List<ITimeGraphArrow>> arrowMethod = fArrowMethod;
if (arrowMethod == null) {
return new TmfModelResponse<>(null, Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
- List<ITimeGraphArrow> arrows = arrowMethod.apply(filter);
+ List<ITimeGraphArrow> arrows = arrowMethod.apply(fetchParameters);
boolean completed = fSs.waitUntilBuilt(0);
Status status = completed ? Status.COMPLETED : Status.RUNNING;
String msg = completed ? CommonStatusMessage.COMPLETED : CommonStatusMessage.RUNNING;
@@ -206,8 +218,40 @@ public class ScriptedTimeGraphDataProvider extends AbstractTmfTraceDataProvider
}
@Override
- public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ public @NonNull TmfModelResponse<Map<String, String>> fetchTooltip(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
+ @Deprecated
+ @Override
+ public TmfModelResponse<List<ITimeGraphEntryModel>> fetchTree(TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ TmfModelResponse<TmfTreeModel<ITimeGraphEntryModel>> modelResponse = fetchTree(parameters, monitor);
+ TmfTreeModel<ITimeGraphEntryModel> model = modelResponse.getModel();
+ return new TmfModelResponse<>(model == null ? null : model.getEntries(), modelResponse.getStatus(), modelResponse.getStatusMessage());
+ }
+
+ @Deprecated
+ @Override
+ public TmfModelResponse<List<ITimeGraphRowModel>> fetchRowModel(SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ TmfModelResponse<TimeGraphModel> modelResponse = fetchRowModel(parameters, monitor);
+ TimeGraphModel model = modelResponse.getModel();
+ return new TmfModelResponse<>(model == null ? null : model.getRows(), modelResponse.getStatus(), modelResponse.getStatusMessage());
+ }
+
+ @Deprecated
+ @Override
+ public TmfModelResponse<List<ITimeGraphArrow>> fetchArrows(TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
+ }
+
+ @Deprecated
+ @Override
+ public TmfModelResponse<Map<String, String>> fetchTooltip(SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
+
}
diff --git a/callstack/org.eclipse.tracecompass.incubator.callstack.core.tests/src/org/eclipse/tracecompass/incubator/callstack/core/tests/flamechart/FlameChartDataProviderTest.java b/callstack/org.eclipse.tracecompass.incubator.callstack.core.tests/src/org/eclipse/tracecompass/incubator/callstack/core/tests/flamechart/FlameChartDataProviderTest.java
index 5b010b8a0..1dd236709 100644
--- a/callstack/org.eclipse.tracecompass.incubator.callstack.core.tests/src/org/eclipse/tracecompass/incubator/callstack/core/tests/flamechart/FlameChartDataProviderTest.java
+++ b/callstack/org.eclipse.tracecompass.incubator.callstack.core.tests/src/org/eclipse/tracecompass/incubator/callstack/core/tests/flamechart/FlameChartDataProviderTest.java
@@ -32,11 +32,14 @@ import org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.p
import org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.provider.FlameChartDataProviderFactory;
import org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.provider.FlameChartEntryModel;
import org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.provider.FlameChartEntryModel.EntryType;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.junit.Test;
@@ -71,19 +74,20 @@ public class FlameChartDataProviderTest extends CallStackTestBase {
public void testFetchTree() {
FlameChartDataProvider dataProvider = getDataProvider();
- TmfModelResponse<List<FlameChartEntryModel>> responseTree = dataProvider.fetchTree(new TimeQueryFilter(0, Long.MAX_VALUE, 2), new NullProgressMonitor());
+ TmfModelResponse<@NonNull TmfTreeModel<@NonNull FlameChartEntryModel>> responseTree = dataProvider.fetchTree(FetchParametersUtils.timeQueryToMap(new TimeQueryFilter(0, Long.MAX_VALUE, 2)), new NullProgressMonitor());
assertTrue(responseTree.getStatus().equals(ITmfResponse.Status.COMPLETED));
// Test the size of the tree
- List<FlameChartEntryModel> model = responseTree.getModel();
+ TmfTreeModel<@NonNull FlameChartEntryModel> model = responseTree.getModel();
assertNotNull(model);
- assertEquals(18, model.size());
+ List<@NonNull FlameChartEntryModel> modelEntries = model.getEntries();
+ assertEquals(18, modelEntries.size());
String traceName = getTrace().getName();
// Test the hierarchy of the tree
- for (FlameChartEntryModel entry : model) {
- FlameChartEntryModel parent = findEntryById(model, entry.getParentId());
+ for (FlameChartEntryModel entry : modelEntries) {
+ FlameChartEntryModel parent = findEntryById(modelEntries, entry.getParentId());
switch (entry.getEntryType()) {
case FUNCTION:
assertNotNull(parent);
@@ -161,63 +165,65 @@ public class FlameChartDataProviderTest extends CallStackTestBase {
public void testFetchModel() {
FlameChartDataProvider dataProvider = getDataProvider();
- TmfModelResponse<List<FlameChartEntryModel>> responseTree = dataProvider.fetchTree(new TimeQueryFilter(0, Long.MAX_VALUE, 2), new NullProgressMonitor());
+ TmfModelResponse<@NonNull TmfTreeModel<@NonNull FlameChartEntryModel>> responseTree = dataProvider.fetchTree(FetchParametersUtils.timeQueryToMap(new TimeQueryFilter(0, Long.MAX_VALUE, 2)), new NullProgressMonitor());
assertTrue(responseTree.getStatus().equals(ITmfResponse.Status.COMPLETED));
- List<FlameChartEntryModel> model = responseTree.getModel();
-
+ TmfTreeModel<@NonNull FlameChartEntryModel> model = responseTree.getModel();
+ assertNotNull(model);
+ List<@NonNull FlameChartEntryModel> modelEntries = model.getEntries();
// Find the entries corresponding to threads 3 and 6 (along with pid 5)
Set<@NonNull Long> selectedIds = new HashSet<>();
// Thread 3
- FlameChartEntryModel tid3 = findEntryByNameAndType(model, "3", EntryType.LEVEL);
+ FlameChartEntryModel tid3 = findEntryByNameAndType(modelEntries, "3", EntryType.LEVEL);
assertNotNull(tid3);
selectedIds.add(tid3.getId());
- List<FlameChartEntryModel> tid3Children = findEntriesByParent(model, tid3.getId());
+ List<FlameChartEntryModel> tid3Children = findEntriesByParent(modelEntries, tid3.getId());
assertEquals(2, tid3Children.size());
tid3Children.forEach(child -> selectedIds.add(child.getId()));
// Pid 5
- FlameChartEntryModel pid5 = findEntryByNameAndType(model, "5", EntryType.LEVEL);
+ FlameChartEntryModel pid5 = findEntryByNameAndType(modelEntries, "5", EntryType.LEVEL);
assertNotNull(pid5);
selectedIds.add(pid5.getId());
// Thread 6
- FlameChartEntryModel tid6 = findEntryByNameAndType(model, "6", EntryType.LEVEL);
+ FlameChartEntryModel tid6 = findEntryByNameAndType(modelEntries, "6", EntryType.LEVEL);
assertNotNull(tid6);
selectedIds.add(tid6.getId());
- List<FlameChartEntryModel> tid6Children = findEntriesByParent(model, tid6.getId());
+ List<FlameChartEntryModel> tid6Children = findEntriesByParent(modelEntries, tid6.getId());
assertEquals(3, tid6Children.size());
tid6Children.forEach(child -> selectedIds.add(child.getId()));
// Get the row model for those entries with high resolution
- TmfModelResponse<List<ITimeGraphRowModel>> rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(3, 15, 50, selectedIds), new NullProgressMonitor());
- assertEquals(ITmfResponse.Status.COMPLETED, rowModel.getStatus());
+ TmfModelResponse<@NonNull TimeGraphModel> rowResponse = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(3, 15, 50, selectedIds)), new NullProgressMonitor());
+ assertEquals(ITmfResponse.Status.COMPLETED, rowResponse.getStatus());
- List<ITimeGraphRowModel> rowModels = rowModel.getModel();
- assertNotNull(rowModels);
- assertEquals(8, rowModels.size());
+ TimeGraphModel rowModel = rowResponse.getModel();
+ assertNotNull(rowModel);
+ List<@NonNull ITimeGraphRowModel> rows = rowModel.getRows();
+ assertEquals(8, rows.size());
// Verify the level entries
- verifyStates(rowModels, tid3, Collections.emptyList());
- verifyStates(rowModels, pid5, Collections.emptyList());
- verifyStates(rowModels, tid6, Collections.emptyList());
+ verifyStates(rows, tid3, Collections.emptyList());
+ verifyStates(rows, pid5, Collections.emptyList());
+ verifyStates(rows, tid6, Collections.emptyList());
// Verify function level 1 of tid 3
- verifyStates(rowModels, findEntryByDepthAndType(tid3Children, 1, EntryType.FUNCTION), ImmutableList.of(new TimeGraphState(3, 17, Integer.MIN_VALUE, "op2")));
+ verifyStates(rows, findEntryByDepthAndType(tid3Children, 1, EntryType.FUNCTION), ImmutableList.of(new TimeGraphState(3, 17, Integer.MIN_VALUE, "op2")));
// Verify function level 2 of tid 3
- verifyStates(rowModels, findEntryByDepthAndType(tid3Children, 2, EntryType.FUNCTION), ImmutableList.of(
+ verifyStates(rows, findEntryByDepthAndType(tid3Children, 2, EntryType.FUNCTION), ImmutableList.of(
new TimeGraphState(1, 4, Integer.MIN_VALUE),
new TimeGraphState(5, 1, Integer.MIN_VALUE, "op3"),
new TimeGraphState(6, 1, Integer.MIN_VALUE),
new TimeGraphState(7, 6, Integer.MIN_VALUE, "op2"),
new TimeGraphState(13, 8, Integer.MIN_VALUE)));
// Verify function level 1 of tid 6
- verifyStates(rowModels, findEntryByDepthAndType(tid6Children, 1, EntryType.FUNCTION), ImmutableList.of(new TimeGraphState(1, 19, Integer.MIN_VALUE, "op1")));
+ verifyStates(rows, findEntryByDepthAndType(tid6Children, 1, EntryType.FUNCTION), ImmutableList.of(new TimeGraphState(1, 19, Integer.MIN_VALUE, "op1")));
// Verify function level 2 of tid 6
- verifyStates(rowModels, findEntryByDepthAndType(tid6Children, 2, EntryType.FUNCTION), ImmutableList.of(
+ verifyStates(rows, findEntryByDepthAndType(tid6Children, 2, EntryType.FUNCTION), ImmutableList.of(
new TimeGraphState(2, 5, Integer.MIN_VALUE, "op3"),
new TimeGraphState(7, 1, Integer.MIN_VALUE),
new TimeGraphState(8, 3, Integer.MIN_VALUE, "op2"),
new TimeGraphState(11, 1, Integer.MIN_VALUE),
new TimeGraphState(12, 8, Integer.MIN_VALUE, "op4")));
// Verify function level 3 of tid 6
- verifyStates(rowModels, findEntryByDepthAndType(tid6Children, 3, EntryType.FUNCTION), ImmutableList.of(
+ verifyStates(rows, findEntryByDepthAndType(tid6Children, 3, EntryType.FUNCTION), ImmutableList.of(
new TimeGraphState(1, 3, Integer.MIN_VALUE),
new TimeGraphState(4, 2, Integer.MIN_VALUE, "op1"),
new TimeGraphState(6, 3, Integer.MIN_VALUE),
@@ -225,31 +231,32 @@ public class FlameChartDataProviderTest extends CallStackTestBase {
new TimeGraphState(10, 11, Integer.MIN_VALUE)));
// Get the row model for those entries with low resolution
- rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(3, 15, 2, selectedIds), new NullProgressMonitor());
- assertEquals(ITmfResponse.Status.COMPLETED, rowModel.getStatus());
+ rowResponse = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(3, 15, 2, selectedIds)), new NullProgressMonitor());
+ assertEquals(ITmfResponse.Status.COMPLETED, rowResponse.getStatus());
- rowModels = rowModel.getModel();
- assertNotNull(rowModels);
- assertEquals(8, rowModels.size());
+ rowModel = rowResponse.getModel();
+ assertNotNull(rowModel);
+ rows = rowModel.getRows();
+ assertEquals(8, rows.size());
// Verify the level entries
- verifyStates(rowModels, tid3, Collections.emptyList());
- verifyStates(rowModels, pid5, Collections.emptyList());
- verifyStates(rowModels, tid6, Collections.emptyList());
+ verifyStates(rows, tid3, Collections.emptyList());
+ verifyStates(rows, pid5, Collections.emptyList());
+ verifyStates(rows, tid6, Collections.emptyList());
// Verify function level 1 of tid 3
- verifyStates(rowModels, findEntryByDepthAndType(tid3Children, 1, EntryType.FUNCTION), ImmutableList.of(new TimeGraphState(3, 17, Integer.MIN_VALUE, "op2")));
+ verifyStates(rows, findEntryByDepthAndType(tid3Children, 1, EntryType.FUNCTION), ImmutableList.of(new TimeGraphState(3, 17, Integer.MIN_VALUE, "op2")));
// Verify function level 2 of tid 3
- verifyStates(rowModels, findEntryByDepthAndType(tid3Children, 2, EntryType.FUNCTION), ImmutableList.of(
+ verifyStates(rows, findEntryByDepthAndType(tid3Children, 2, EntryType.FUNCTION), ImmutableList.of(
new TimeGraphState(1, 4, Integer.MIN_VALUE),
new TimeGraphState(13, 8, Integer.MIN_VALUE)));
// Verify function level 1 of tid 6
- verifyStates(rowModels, findEntryByDepthAndType(tid6Children, 1, EntryType.FUNCTION), ImmutableList.of(new TimeGraphState(1, 19, Integer.MIN_VALUE, "op1")));
+ verifyStates(rows, findEntryByDepthAndType(tid6Children, 1, EntryType.FUNCTION), ImmutableList.of(new TimeGraphState(1, 19, Integer.MIN_VALUE, "op1")));
// Verify function level 2 of tid 6
- verifyStates(rowModels, findEntryByDepthAndType(tid6Children, 2, EntryType.FUNCTION), ImmutableList.of(
+ verifyStates(rows, findEntryByDepthAndType(tid6Children, 2, EntryType.FUNCTION), ImmutableList.of(
new TimeGraphState(2, 5, Integer.MIN_VALUE, "op3"),
new TimeGraphState(12, 8, Integer.MIN_VALUE, "op4")));
// Verify function level 3 of tid 6
- verifyStates(rowModels, findEntryByDepthAndType(tid6Children, 3, EntryType.FUNCTION), ImmutableList.of(
+ verifyStates(rows, findEntryByDepthAndType(tid6Children, 3, EntryType.FUNCTION), ImmutableList.of(
new TimeGraphState(1, 3, Integer.MIN_VALUE),
new TimeGraphState(10, 11, Integer.MIN_VALUE)));
}
@@ -261,68 +268,71 @@ public class FlameChartDataProviderTest extends CallStackTestBase {
public void testFollowEvents() {
FlameChartDataProvider dataProvider = getDataProvider();
- TmfModelResponse<List<FlameChartEntryModel>> responseTree = dataProvider.fetchTree(new TimeQueryFilter(0, Long.MAX_VALUE, 2), new NullProgressMonitor());
+ TmfModelResponse<@NonNull TmfTreeModel<@NonNull FlameChartEntryModel>> responseTree = dataProvider.fetchTree(FetchParametersUtils.timeQueryToMap(new TimeQueryFilter(0, Long.MAX_VALUE, 2)), new NullProgressMonitor());
assertTrue(responseTree.getStatus().equals(ITmfResponse.Status.COMPLETED));
- List<FlameChartEntryModel> model = responseTree.getModel();
+ TmfTreeModel<@NonNull FlameChartEntryModel> model = responseTree.getModel();
+ assertNotNull(model);
+ List<@NonNull FlameChartEntryModel> modelEntries = model.getEntries();
// Thread 2
- FlameChartEntryModel tid2 = findEntryByNameAndType(model, "2", EntryType.LEVEL);
+ FlameChartEntryModel tid2 = findEntryByNameAndType(modelEntries, "2", EntryType.LEVEL);
assertNotNull(tid2);
- List<FlameChartEntryModel> tid2Children = findEntriesByParent(model, tid2.getId());
+ List<FlameChartEntryModel> tid2Children = findEntriesByParent(modelEntries, tid2.getId());
assertEquals(3, tid2Children.size());
// For each child, make sure the response is always the same
for (FlameChartEntryModel tid2Child : tid2Children) {
- TmfModelResponse<List<ITimeGraphRowModel>> rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(6, Long.MAX_VALUE, 2, Collections.singleton(tid2Child.getId())), MONITOR);
+ TmfModelResponse<@NonNull TimeGraphModel> rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(6, Long.MAX_VALUE, 2, Collections.singleton(tid2Child.getId()))), MONITOR);
verifyFollowResponse(rowModel, 1, 7);
}
// Go forward from time 7 till the end for one of the child element
Set<@NonNull Long> selectedEntry = Objects.requireNonNull(Collections.singleton(tid2Children.get(1).getId()));
- TmfModelResponse<List<ITimeGraphRowModel>> rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(7, Long.MAX_VALUE, 2, selectedEntry), MONITOR);
+ TmfModelResponse<@NonNull TimeGraphModel> rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(7, Long.MAX_VALUE, 2, selectedEntry)), MONITOR);
verifyFollowResponse(rowModel, 0, 10);
- rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(10, Long.MAX_VALUE, 2, selectedEntry), new NullProgressMonitor());
+ rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(10, Long.MAX_VALUE, 2, selectedEntry)), new NullProgressMonitor());
verifyFollowResponse(rowModel, 1, 12);
- rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(12, Long.MAX_VALUE, 2, selectedEntry), new NullProgressMonitor());
+ rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(12, Long.MAX_VALUE, 2, selectedEntry)), new NullProgressMonitor());
verifyFollowResponse(rowModel, 0, 20);
- rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(20, Long.MAX_VALUE, 2, selectedEntry), new NullProgressMonitor());
+ rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(20, Long.MAX_VALUE, 2, selectedEntry)), new NullProgressMonitor());
verifyFollowResponse(rowModel, -1, -1);
// Go backward from the back
- rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 20L), selectedEntry), new NullProgressMonitor());
+ rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 20L), selectedEntry)), new NullProgressMonitor());
verifyFollowResponse(rowModel, 1, 12);
// Go backward from time 7 till the beginning
- rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 7L), selectedEntry), new NullProgressMonitor());
+ rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 7L), selectedEntry)), new NullProgressMonitor());
verifyFollowResponse(rowModel, 2, 5);
- rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 5L), selectedEntry), new NullProgressMonitor());
+ rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 5L), selectedEntry)), new NullProgressMonitor());
verifyFollowResponse(rowModel, 3, 4);
- rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 4L), selectedEntry), new NullProgressMonitor());
+ rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 4L), selectedEntry)), new NullProgressMonitor());
verifyFollowResponse(rowModel, 2, 3);
- rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 3L), selectedEntry), new NullProgressMonitor());
+ rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 3L), selectedEntry)), new NullProgressMonitor());
verifyFollowResponse(rowModel, 1, 1);
- rowModel = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 1L), selectedEntry), new NullProgressMonitor());
+ rowModel = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, 1L), selectedEntry)), new NullProgressMonitor());
verifyFollowResponse(rowModel, -1, -1);
}
- private static void verifyFollowResponse(TmfModelResponse<List<ITimeGraphRowModel>> rowModel, int expectedDepth, int expectedTime) {
+ private static void verifyFollowResponse(TmfModelResponse<@NonNull TimeGraphModel> rowModel, int expectedDepth, int expectedTime) {
assertEquals(ITmfResponse.Status.COMPLETED, rowModel.getStatus());
- List<ITimeGraphRowModel> rowModels = rowModel.getModel();
+ TimeGraphModel model = rowModel.getModel();
if (expectedDepth < 0) {
- assertNull(rowModels);
+ assertNull(model);
return;
}
- assertNotNull(rowModels);
- assertEquals(1, rowModels.size());
- List<ITimeGraphState> row = rowModels.get(0).getStates();
+ assertNotNull(model);
+ List<@NonNull ITimeGraphRowModel> rows = model.getRows();
+ assertEquals(1, rows.size());
+ List<ITimeGraphState> row = rows.get(0).getStates();
assertEquals(1, row.size());
ITimeGraphState stackInterval = row.get(0);
long depth = stackInterval.getValue();
@@ -338,14 +348,15 @@ public class FlameChartDataProviderTest extends CallStackTestBase {
assertNotNull(rowModel);
List<ITimeGraphState> states = rowModel.getStates();
for (int i = 0; i < states.size(); i++) {
+ String entryName = entry.getName();
if (i > expectedStates.size() - 1) {
- fail("Unexpected state at position " + i + " for entry " + entry.getName() + ": " + states.get(i));
+ fail("Unexpected state at position " + i + " for entry " + entryName + ": " + states.get(i));
}
ITimeGraphState actual = states.get(i);
ITimeGraphState expected = expectedStates.get(i);
- assertEquals("State start time at " + i + " for entry " + entry.getName(), expected.getStartTime(), actual.getStartTime());
- assertEquals("Duration at " + i + " for entry " + entry.getName(), expected.getDuration(), actual.getDuration());
- assertEquals("Label at " + i + " for entry " + entry.getName(), expected.getLabel(), actual.getLabel());
+ assertEquals("State start time at " + i + " for entry " + entryName, expected.getStartTime(), actual.getStartTime());
+ assertEquals("Duration at " + i + " for entry " + entryName, expected.getDuration(), actual.getDuration());
+ assertEquals("Label at " + i + " for entry " + entryName, expected.getLabel(), actual.getLabel());
}
}
diff --git a/callstack/org.eclipse.tracecompass.incubator.callstack.core/.settings/org.eclipse.jdt.core.prefs b/callstack/org.eclipse.tracecompass.incubator.callstack.core/.settings/org.eclipse.jdt.core.prefs
index f8a2fe185..221a1f885 100644
--- a/callstack/org.eclipse.tracecompass.incubator.callstack.core/.settings/org.eclipse.jdt.core.prefs
+++ b/callstack/org.eclipse.tracecompass.incubator.callstack.core/.settings/org.eclipse.jdt.core.prefs
@@ -33,7 +33,7 @@ org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
org.eclipse.jdt.core.compiler.problem.comparingIdentical=error
org.eclipse.jdt.core.compiler.problem.deadCode=error
org.eclipse.jdt.core.compiler.problem.deprecation=error
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=error
diff --git a/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartArrowProvider.java b/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartArrowProvider.java
index 6de9ee6d3..c5af35ad3 100644
--- a/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartArrowProvider.java
+++ b/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartArrowProvider.java
@@ -12,12 +12,14 @@ package org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.callstack.core.instrumented.statesystem.InstrumentedCallStackAnalysis;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
@@ -52,7 +54,11 @@ public class FlameChartArrowProvider {
* the monitor
* @return the corresponding state intervals
*/
- public List<ITmfStateInterval> fetchArrows(TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ public List<ITmfStateInterval> fetchArrows(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
+ TimeQueryFilter filter = FetchParametersUtils.createTimeQuery(fetchParameters);
+ if (filter == null) {
+ return Collections.emptyList();
+ }
long start = filter.getStart();
long end = filter.getEnd();
diff --git a/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartDataProvider.java b/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartDataProvider.java
index 7670fa845..a7debcafc 100644
--- a/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartDataProvider.java
+++ b/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartDataProvider.java
@@ -47,6 +47,7 @@ import org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.p
import org.eclipse.tracecompass.internal.analysis.os.linux.core.threadstatus.ThreadEntryModel;
import org.eclipse.tracecompass.internal.analysis.os.linux.core.threadstatus.ThreadStatusDataProvider;
import org.eclipse.tracecompass.internal.tmf.core.model.AbstractTmfTraceDataProvider;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.segmentstore.core.ISegment;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.exceptions.TimeRangeException;
@@ -60,8 +61,10 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphDataProvider;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphArrow;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse.Status;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
@@ -162,7 +165,7 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
public @Nullable Map<String, String> fetchTooltip(int threadId, long time, @Nullable IProgressMonitor monitor) {
for (ThreadEntryModel entry : fThreadTree) {
if (entry.getThreadId() == threadId && entry.getStartTime() <= time && entry.getEndTime() >= time) {
- TmfModelResponse<Map<String, String>> tooltip = fThreadDataProvider.fetchTooltip(new SelectionTimeQueryFilter(Collections.singletonList(time), Collections.singleton(entry.getId())), monitor);
+ TmfModelResponse<Map<String, String>> tooltip = fThreadDataProvider.fetchTooltip(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(Collections.singletonList(time), Collections.singleton(entry.getId()))), monitor);
return tooltip.getModel();
}
}
@@ -209,7 +212,7 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
private final String fAnalysisId;
private final ReentrantReadWriteLock fLock = new ReentrantReadWriteLock(false);
private final FlameChartArrowProvider fArrowProvider;
- private @Nullable TmfModelResponse<List<FlameChartEntryModel>> fCached;
+ private @Nullable TmfModelResponse<TmfTreeModel<FlameChartEntryModel>> fCached;
private @Nullable ThreadData fThreadData = null;
/**
@@ -231,8 +234,8 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
}
@Override
- public TmfModelResponse<List<ITimeGraphArrow>> fetchArrows(TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
- List<ITmfStateInterval> arrows = fArrowProvider.fetchArrows(filter, monitor);
+ public TmfModelResponse<List<ITimeGraphArrow>> fetchArrows(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
+ List<ITmfStateInterval> arrows = fArrowProvider.fetchArrows(fetchParameters, monitor);
List<ITimeGraphArrow> tgArrows = new ArrayList<>();
// First, get the distinct callstacks
fLock.readLock().lock();
@@ -290,9 +293,10 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
}
@Override
- public TmfModelResponse<Map<String, String>> fetchTooltip(SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ public TmfModelResponse<Map<String, String>> fetchTooltip(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
try (FlowScopeLog scope = new FlowScopeLogBuilder(LOGGER, Level.FINE, "FlameChartDataProvider#fetchTooltip") //$NON-NLS-1$
.setCategory(getClass().getSimpleName()).build()) {
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(fetchParameters);
Map<Long, FlameChartEntryModel> entries = getSelectedEntries(filter);
if (entries.size() != 1) {
// Not the expected size of tooltip, just return empty
@@ -378,7 +382,7 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
}
@Override
- public TmfModelResponse<List<FlameChartEntryModel>> fetchTree(TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ public TmfModelResponse<TmfTreeModel<FlameChartEntryModel>> fetchTree(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
if (fCached != null) {
return fCached;
}
@@ -397,7 +401,7 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
// Initialize the first element of the tree
ImmutableList.Builder<FlameChartEntryModel> builder = ImmutableList.builder();
- FlameChartEntryModel traceEntry = new FlameChartEntryModel(fTraceId, -1, getTrace().getName(), start, end, FlameChartEntryModel.EntryType.TRACE);
+ FlameChartEntryModel traceEntry = new FlameChartEntryModel(fTraceId, -1, Collections.singletonList(getTrace().getName()), start, end, FlameChartEntryModel.EntryType.TRACE);
builder.add(traceEntry);
FlameChartEntryModel callStackRoot = traceEntry;
@@ -417,12 +421,12 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
List<FlameChartEntryModel> tree = builder.build();
tree.forEach(entry -> fEntries.put(entry.getId(), entry));
if (complete) {
- TmfModelResponse<List<FlameChartEntryModel>> response = new TmfModelResponse<>(tree,
+ TmfModelResponse<TmfTreeModel<FlameChartEntryModel>> response = new TmfModelResponse<>(new TmfTreeModel<>(Collections.emptyList(), tree),
ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
fCached = response;
return response;
}
- return new TmfModelResponse<>(tree, ITmfResponse.Status.RUNNING, CommonStatusMessage.RUNNING);
+ return new TmfModelResponse<>(new TmfTreeModel<>(Collections.emptyList(), tree), ITmfResponse.Status.RUNNING, CommonStatusMessage.RUNNING);
} finally {
fLock.writeLock().unlock();
}
@@ -440,10 +444,10 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
ThreadStatusDataProvider dataProvider = DataProviderManager.getInstance().getDataProvider(trace, ThreadStatusDataProvider.ID, ThreadStatusDataProvider.class);
if (dataProvider != null) {
// Get the tree for the trace's current range
- TmfModelResponse<List<ThreadEntryModel>> threadTreeResp = dataProvider.fetchTree(new TimeQueryFilter(start, Long.MAX_VALUE, 2), monitor);
- List<ThreadEntryModel> threadTree = threadTreeResp.getModel();
+ TmfModelResponse<TmfTreeModel<ThreadEntryModel>> threadTreeResp = dataProvider.fetchTree(FetchParametersUtils.timeQueryToMap(new TimeQueryFilter(start, Long.MAX_VALUE, 2)), monitor);
+ TmfTreeModel<ThreadEntryModel> threadTree = threadTreeResp.getModel();
if (threadTree != null) {
- fThreadData = new ThreadData(dataProvider, threadTree, threadTreeResp.getStatus());
+ fThreadData = new ThreadData(dataProvider, threadTree.getEntries(), threadTreeResp.getStatus());
break;
}
}
@@ -453,7 +457,7 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
private boolean processCallStackElement(ICallStackElement element, Builder<FlameChartEntryModel> builder, FlameChartEntryModel parentEntry) {
long elementId = getEntryId(element);
- FlameChartEntryModel entry = new FlameChartEntryModel(elementId, parentEntry.getId(), element.getName(), parentEntry.getStartTime(), parentEntry.getEndTime(), FlameChartEntryModel.EntryType.LEVEL);
+ FlameChartEntryModel entry = new FlameChartEntryModel(elementId, parentEntry.getId(), Collections.singletonList(element.getName()), parentEntry.getStartTime(), parentEntry.getEndTime(), FlameChartEntryModel.EntryType.LEVEL);
builder.add(entry);
boolean needsKernel = false;
@@ -464,12 +468,12 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
InstrumentedCallStackElement finalElement = (InstrumentedCallStackElement) element;
CallStack callStack = finalElement.getCallStack();
for (int depth = 0; depth < callStack.getMaxDepth(); depth++) {
- FlameChartEntryModel flameChartEntry = new FlameChartEntryModel(getEntryId(new CallStackDepth(callStack, depth + 1)), entry.getId(), element.getName(), parentEntry.getStartTime(), parentEntry.getEndTime(),
+ FlameChartEntryModel flameChartEntry = new FlameChartEntryModel(getEntryId(new CallStackDepth(callStack, depth + 1)), entry.getId(), Collections.singletonList(element.getName()), parentEntry.getStartTime(), parentEntry.getEndTime(),
FlameChartEntryModel.EntryType.FUNCTION, depth + 1);
builder.add(flameChartEntry);
if (depth == 0 && callStack.hasKernelStatuses()) {
needsKernel = true;
- builder.add(new FlameChartEntryModel(getKernelEntryId(flameChartEntry.getId()), entry.getId(), String.valueOf(Messages.FlameChartDataProvider_KernelStatusTitle), parentEntry.getStartTime(), parentEntry.getEndTime(),
+ builder.add(new FlameChartEntryModel(getKernelEntryId(flameChartEntry.getId()), entry.getId(), Collections.singletonList(String.valueOf(Messages.FlameChartDataProvider_KernelStatusTitle)), parentEntry.getStartTime(), parentEntry.getEndTime(),
FlameChartEntryModel.EntryType.KERNEL));
}
}
@@ -501,18 +505,26 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
}
@Override
- public TmfModelResponse<List<ITimeGraphRowModel>> fetchRowModel(SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ public TmfModelResponse<TimeGraphModel> fetchRowModel(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
try (FlowScopeLog scope = new FlowScopeLogBuilder(LOGGER, Level.FINE, "FlameChartDataProvider#fetchRowModel") //$NON-NLS-1$
.setCategory(getClass().getSimpleName()).build()) {
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(fetchParameters);
+ if (filter == null) {
+ return new TmfModelResponse<>(null, ITmfResponse.Status.FAILED, CommonStatusMessage.INCORRECT_QUERY_PARAMETERS);
+ }
Map<Long, FlameChartEntryModel> entries = getSelectedEntries(filter);
if (entries.size() == 1 && filter.getTimesRequested().length == 2) {
// this is a request for a follow event.
Entry<@NonNull Long, @NonNull FlameChartEntryModel> entry = entries.entrySet().iterator().next();
if (filter.getStart() == Long.MIN_VALUE) {
- return new TmfModelResponse<>(getFollowEvent(entry, filter.getEnd(), false), ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ List<ITimeGraphRowModel> followEvents = getFollowEvent(entry, filter.getEnd(), false);
+ TimeGraphModel model = followEvents == null ? null : new TimeGraphModel(followEvents);
+ return new TmfModelResponse<>(model, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
} else if (filter.getEnd() == Long.MAX_VALUE) {
- return new TmfModelResponse<>(getFollowEvent(entry, filter.getStart(), true), ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ List<ITimeGraphRowModel> followEvents = getFollowEvent(entry, filter.getStart(), true);
+ TimeGraphModel model = followEvents == null ? null : new TimeGraphModel(followEvents);
+ return new TmfModelResponse<>(model, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
}
// For each kernel status entry, add the first row of the callstack
@@ -528,7 +540,7 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
return new TmfModelResponse<>(null, ITmfResponse.Status.CANCELLED, CommonStatusMessage.TASK_CANCELLED);
}
List<ITimeGraphRowModel> collect = csRows.entrySet().stream().map(entry -> new TimeGraphRowModel(entry.getKey(), entry.getValue())).collect(Collectors.toList());
- return new TmfModelResponse<>(collect, complete ? Status.COMPLETED : Status.RUNNING,
+ return new TmfModelResponse<>(new TimeGraphModel(collect), complete ? Status.COMPLETED : Status.RUNNING,
complete ? CommonStatusMessage.COMPLETED : CommonStatusMessage.RUNNING);
} catch (IndexOutOfBoundsException | TimeRangeException | StateSystemDisposedException e) {
return new TmfModelResponse<>(null, Status.FAILED, String.valueOf(e.getMessage()));
@@ -627,12 +639,12 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
// and the trace filtered the right host.
BiMap<Long, Integer> threadModelIds = filterThreads(tree, tids);
SelectionTimeQueryFilter tidFilter = new SelectionTimeQueryFilter(times, threadModelIds.keySet());
- TmfModelResponse<List<ITimeGraphRowModel>> rowModel = threadData.fThreadDataProvider.fetchRowModel(tidFilter, monitor);
- List<ITimeGraphRowModel> rowModels = rowModel.getModel();
+ TmfModelResponse<TimeGraphModel> rowModel = threadData.fThreadDataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(tidFilter), monitor);
+ TimeGraphModel rowModels = rowModel.getModel();
if (rowModel.getStatus().equals(Status.CANCELLED) || rowModel.getStatus().equals(Status.FAILED) || rowModels == null) {
return Collections.emptyMap();
}
- return mapThreadStates(rowModels, threadModelIds, tids);
+ return mapThreadStates(rowModels.getRows(), threadModelIds, tids);
}
private static Map<Long, List<ITimeGraphState>> mapThreadStates(List<ITimeGraphRowModel> rowModels, BiMap<Long, Integer> threadModelIds, List<TidInformation> tids) {
@@ -796,4 +808,45 @@ public class FlameChartDataProvider extends AbstractTmfTraceDataProvider impleme
return null;
}
+ @Deprecated
+ @Override
+ public TmfModelResponse<List<FlameChartEntryModel>> fetchTree(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ TmfModelResponse<@NonNull TmfTreeModel<@NonNull FlameChartEntryModel>> response = fetchTree(parameters, monitor);
+ TmfTreeModel<@NonNull FlameChartEntryModel> model = response.getModel();
+ List<FlameChartEntryModel> treeModel = null;
+ if (model != null) {
+ treeModel = model.getEntries();
+ }
+ return new TmfModelResponse<>(treeModel, response.getStatus(),
+ response.getStatusMessage());
+ }
+
+ @Deprecated
+ @Override
+ public TmfModelResponse<List<ITimeGraphRowModel>> fetchRowModel(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ TmfModelResponse<TimeGraphModel> response = fetchRowModel(parameters, monitor);
+ TimeGraphModel model = response.getModel();
+ List<ITimeGraphRowModel> rows = null;
+ if (model != null) {
+ rows = model.getRows();
+ }
+ return new TmfModelResponse<>(rows, response.getStatus(), response.getStatusMessage());
+ }
+
+ @Deprecated
+ @Override
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
+ }
+
+ @Deprecated
+ @Override
+ public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
+
}
diff --git a/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartEntryModel.java b/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartEntryModel.java
index 43e341f4a..39aec1695 100644
--- a/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartEntryModel.java
+++ b/callstack/org.eclipse.tracecompass.incubator.callstack.core/src/org/eclipse/tracecompass/incubator/internal/callstack/core/instrumented/provider/FlameChartEntryModel.java
@@ -9,6 +9,7 @@
package org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.provider;
+import java.util.List;
import java.util.Objects;
import org.eclipse.jdt.annotation.Nullable;
@@ -63,7 +64,7 @@ public class FlameChartEntryModel extends TimeGraphEntryModel {
* @param entryType
* The type of this entry
*/
- public FlameChartEntryModel(long id, long parentId, String name, long startTime, long endTime, EntryType entryType) {
+ public FlameChartEntryModel(long id, long parentId, List<String> name, long startTime, long endTime, EntryType entryType) {
super(id, parentId, name, startTime, endTime);
fEntryType = entryType;
fDepth = -1;
@@ -87,7 +88,7 @@ public class FlameChartEntryModel extends TimeGraphEntryModel {
* @param depth
* entry's PID or TID if is a thread
*/
- public FlameChartEntryModel(long elementId, long parentId, String name, long startTime, long endTime, EntryType entryType, int depth) {
+ public FlameChartEntryModel(long elementId, long parentId, List<String> name, long startTime, long endTime, EntryType entryType, int depth) {
super(elementId, parentId, name, startTime, endTime);
fEntryType = entryType;
fDepth = depth;
diff --git a/callstack/org.eclipse.tracecompass.incubator.callstack.ui/src/org/eclipse/tracecompass/incubator/internal/callstack/ui/views/flamechart/FlameChartPresentationProvider.java b/callstack/org.eclipse.tracecompass.incubator.callstack.ui/src/org/eclipse/tracecompass/incubator/internal/callstack/ui/views/flamechart/FlameChartPresentationProvider.java
index 4fe29cdd4..54bc81cc2 100644
--- a/callstack/org.eclipse.tracecompass.incubator.callstack.ui/src/org/eclipse/tracecompass/incubator/internal/callstack/ui/views/flamechart/FlameChartPresentationProvider.java
+++ b/callstack/org.eclipse.tracecompass.incubator.callstack.ui/src/org/eclipse/tracecompass/incubator/internal/callstack/ui/views/flamechart/FlameChartPresentationProvider.java
@@ -23,6 +23,7 @@ import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.provider.FlameChartEntryModel;
import org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.provider.FlameChartEntryModel.EntryType;
import org.eclipse.tracecompass.incubator.internal.callstack.ui.FlameViewPalette;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphDataProvider;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphEntryModel;
@@ -164,7 +165,8 @@ public class FlameChartPresentationProvider extends TimeGraphPresentationProvide
TimeGraphEntry entry = (TimeGraphEntry) event.getEntry();
ITimeGraphDataProvider<? extends TimeGraphEntryModel> dataProvider = BaseDataProviderTimeGraphView.getProvider(entry);
TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> response = dataProvider.fetchTooltip(
- new SelectionTimeQueryFilter(hoverTime, hoverTime, 1, Collections.singletonList(entry.getModel().getId())), null);
+ FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(hoverTime, hoverTime, 1, Collections.singletonList(entry.getModel().getId()))),
+ null);
Map<@NonNull String, @NonNull String> map = response.getModel();
if (map != null) {
retMap.putAll(map);
diff --git a/callstack/org.eclipse.tracecompass.incubator.callstack.ui/src/org/eclipse/tracecompass/incubator/internal/callstack/ui/views/flamechart/FlameChartView.java b/callstack/org.eclipse.tracecompass.incubator.callstack.ui/src/org/eclipse/tracecompass/incubator/internal/callstack/ui/views/flamechart/FlameChartView.java
index 28b5f0ca6..8ad4735ab 100644
--- a/callstack/org.eclipse.tracecompass.incubator.callstack.ui/src/org/eclipse/tracecompass/incubator/internal/callstack/ui/views/flamechart/FlameChartView.java
+++ b/callstack/org.eclipse.tracecompass.incubator.callstack.ui/src/org/eclipse/tracecompass/incubator/internal/callstack/ui/views/flamechart/FlameChartView.java
@@ -35,6 +35,7 @@ import org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.p
import org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.provider.FlameChartEntryModel;
import org.eclipse.tracecompass.incubator.internal.callstack.core.instrumented.provider.FlameChartEntryModel.EntryType;
import org.eclipse.tracecompass.incubator.internal.callstack.ui.Activator;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderManager;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphDataProvider;
@@ -42,6 +43,7 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphEntryModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.signal.TmfSelectionRangeUpdatedSignal;
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
@@ -437,10 +439,10 @@ public class FlameChartView extends BaseDataProviderTimeGraphView {
Map<Long, TimeGraphEntry> map = Maps.uniqueIndex(filtered, e -> e.getModel().getId());
// use time -1 as a lower bound for the end of Time events to be included.
SelectionTimeQueryFilter filter = new SelectionTimeQueryFilter(Math.max(traceEntry.getStartTime(), time - 1), time, 2, map.keySet());
- TmfModelResponse<@NonNull List<@NonNull ITimeGraphRowModel>> response = traceEntry.getProvider().fetchRowModel(filter, null);
- List<@NonNull ITimeGraphRowModel> model = response.getModel();
+ TmfModelResponse<@NonNull TimeGraphModel> response = traceEntry.getProvider().fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(filter), null);
+ TimeGraphModel model = response.getModel();
if (model != null) {
- for (ITimeGraphRowModel row : model) {
+ for (ITimeGraphRowModel row : model.getRows()) {
syncToRow(row, time, map);
}
}
@@ -522,13 +524,13 @@ public class FlameChartView extends BaseDataProviderTimeGraphView {
TimeGraphEntry callStackEntry = (TimeGraphEntry) entry;
ITimeGraphDataProvider<? extends TimeGraphEntryModel> provider = getProvider(callStackEntry);
long selectionBegin = viewer.getSelectionBegin();
- SelectionTimeQueryFilter filter = new SelectionTimeQueryFilter(selectionBegin, Long.MAX_VALUE, 2, Collections.singleton(callStackEntry.getModel().getId()));
- TmfModelResponse<@NonNull List<@NonNull ITimeGraphRowModel>> response = provider.fetchRowModel(filter, null);
- List<@NonNull ITimeGraphRowModel> model = response.getModel();
- if (model == null || model.size() != 1) {
+ Map<@NonNull String, @NonNull Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(selectionBegin, Long.MAX_VALUE, 2, Collections.singleton(callStackEntry.getModel().getId())));
+ TmfModelResponse<@NonNull TimeGraphModel> response = provider.fetchRowModel(parameters, null);
+ TimeGraphModel model = response.getModel();
+ if (model == null || model.getRows().size() != 1) {
return;
}
- List<@NonNull ITimeGraphState> row = model.get(0).getStates();
+ List<@NonNull ITimeGraphState> row = model.getRows().get(0).getStates();
if (row.size() != 1) {
return;
}
@@ -572,13 +574,13 @@ public class FlameChartView extends BaseDataProviderTimeGraphView {
TimeGraphEntry callStackEntry = (TimeGraphEntry) entry;
ITimeGraphDataProvider<? extends TimeGraphEntryModel> provider = getProvider(callStackEntry);
long selectionBegin = viewer.getSelectionBegin();
- SelectionTimeQueryFilter filter = new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, selectionBegin), Collections.singleton(callStackEntry.getModel().getId()));
- TmfModelResponse<@NonNull List<@NonNull ITimeGraphRowModel>> response = provider.fetchRowModel(filter, null);
- List<@NonNull ITimeGraphRowModel> model = response.getModel();
- if (model == null || model.size() != 1) {
+ Map<@NonNull String, @NonNull Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(Lists.newArrayList(Long.MIN_VALUE, selectionBegin), Collections.singleton(callStackEntry.getModel().getId())));
+ TmfModelResponse<@NonNull TimeGraphModel> response = provider.fetchRowModel(parameters, null);
+ TimeGraphModel model = response.getModel();
+ if (model == null || model.getRows().size() != 1) {
return;
}
- List<@NonNull ITimeGraphState> row = model.get(0).getStates();
+ List<@NonNull ITimeGraphState> row = model.getRows().get(0).getStates();
if (row.size() != 1) {
return;
}
diff --git a/common/org.eclipse.tracecompass.incubator.target/tracecompass-incubator-master.target b/common/org.eclipse.tracecompass.incubator.target/tracecompass-incubator-master.target
index bbaf9ddaf..e8ec0ee84 100644
--- a/common/org.eclipse.tracecompass.incubator.target/tracecompass-incubator-master.target
+++ b/common/org.eclipse.tracecompass.incubator.target/tracecompass-incubator-master.target
@@ -160,4 +160,4 @@
-Xmx512M</vmArgs>
<programArgs>-consolelog</programArgs>
</launcherArgs>
-</target> \ No newline at end of file
+</target>
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/META-INF/MANIFEST.MF b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/META-INF/MANIFEST.MF
index f492aaca3..e0c583ec3 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/META-INF/MANIFEST.MF
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/META-INF/MANIFEST.MF
@@ -26,6 +26,7 @@ Export-Package: org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core
Import-Package: com.fasterxml.jackson.annotation,
com.fasterxml.jackson.jaxrs.base,
com.fasterxml.jackson.jaxrs.json,
+ com.google.common.base,
com.google.common.collect,
javax.ws.rs.client,
javax.ws.rs.core,
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/DataProviderServiceTest.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/DataProviderServiceTest.java
index ac282d601..f2f7e84f1 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/DataProviderServiceTest.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/DataProviderServiceTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2018 Ericsson
+ * Copyright (c) 2018, 2019 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
@@ -10,13 +10,24 @@
package org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.services;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.model.views.QueryParameters;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services.DataProviderService;
+import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.DataProviderDescriptorStub;
import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.utils.RestServerTest;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
+import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
import org.junit.Test;
/**
@@ -25,9 +36,26 @@ import org.junit.Test;
* @author Loic Prieur-Drevon
*/
public class DataProviderServiceTest extends RestServerTest {
- static final String PROVIDERS_PATH = "providers";
private static final String CALL_STACK_DATAPROVIDER_ID = "org.eclipse.tracecompass.internal.analysis.profiling.callstack.provider.CallStackDataProvider";
- static final String TREE_PATH = "tree";
+
+ /**
+ * Test getting the data provider descriptors
+ */
+ @Test
+ public void testProviders() {
+
+ WebTarget traces = getApplicationEndpoint().path(TRACES);
+ RestServerTest.assertPost(traces, CONTEXT_SWITCHES_UST_STUB);
+
+ WebTarget experiments = getApplicationEndpoint().path(EXPERIMENTS);
+ WebTarget providers = experiments.path(CONTEXT_SWITCHES_UST_UUID.toString())
+ .path(OUTPUTS_PATH);
+
+ Set<DataProviderDescriptorStub> descriptors = getDataProviderDescriptors(providers);
+ for (DataProviderDescriptorStub desc : EXPECTED_DATA_PROVIDER_DESCRIPTOR) {
+ assertTrue(desc.getName(), descriptors.contains(desc));
+ }
+ }
/**
* Ensure that the Call Stack data provider exists for the trace.
@@ -37,20 +65,15 @@ public class DataProviderServiceTest extends RestServerTest {
WebTarget traces = getApplicationEndpoint().path(TRACES);
RestServerTest.assertPost(traces, CONTEXT_SWITCHES_UST_STUB);
- WebTarget callstackTree = traces.path(CONTEXT_SWITCHES_UST_UUID.toString())
- .path(PROVIDERS_PATH)
- .path(CALL_STACK_DATAPROVIDER_ID)
- .path(TREE_PATH);
+ WebTarget callstackTree = getTimeGraphTreeEndpoint(CONTEXT_SWITCHES_UST_UUID.toString(), CALL_STACK_DATAPROVIDER_ID);
- Response tree = callstackTree
- .queryParam("start", 0L)
- .queryParam("end", Long.MAX_VALUE)
- .queryParam("nb", 2)
- .request(MediaType.APPLICATION_JSON).get();
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(new TimeQueryFilter(0L, Long.MAX_VALUE, 2));
+ Response tree = callstackTree.request().post(Entity.json(new QueryParameters(parameters , Collections.emptyList())));
assertEquals("There should be a positive response for the data provider", 200, tree.getStatus());
- Response defaults = callstackTree
- .request(MediaType.APPLICATION_JSON).get();
+ parameters = new HashMap<>();
+ parameters.put(DataProviderParameterUtils.REQUESTED_TIME_KEY, Collections.emptyList());
+ Response defaults = callstackTree.request().post(Entity.json(new QueryParameters(parameters , Collections.emptyList())));
assertEquals("Default values should return OK code", 200, defaults.getStatus());
}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/ExperimentManagerServiceTest.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/ExperimentManagerServiceTest.java
index 2720c70c2..9022f912a 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/ExperimentManagerServiceTest.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/ExperimentManagerServiceTest.java
@@ -38,7 +38,7 @@ public class ExperimentManagerServiceTest extends RestServerTest {
private static final @NonNull String EXPERIMENT_UUID = "bb12687f-9866-3a9f-bf55-b4d9da0137ed";
private static final @NonNull ImmutableSet<TraceModelStub> CONTEXT_SWITCH_SET = ImmutableSet.of(CONTEXT_SWITCHES_KERNEL_STUB, CONTEXT_SWITCHES_UST_STUB);
private static final ExperimentModelStub EXPECTED = new ExperimentModelStub(TEST,
- UUID.fromString(EXPERIMENT_UUID), 0L, 0L, 0L, CONTEXT_SWITCH_SET);
+ UUID.fromString(EXPERIMENT_UUID), 0L, 0L, 0L, "RUNNING", CONTEXT_SWITCH_SET);
/**
* Basic test for the {@link ExperimentManagerService}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/XmlManagerServiceTest.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/XmlManagerServiceTest.java
index b078cd267..d29cca0ae 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/XmlManagerServiceTest.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/services/XmlManagerServiceTest.java
@@ -16,6 +16,7 @@ import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.client.Entity;
@@ -29,8 +30,10 @@ import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.model.views.QueryParameters;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services.XmlManagerService;
import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.utils.RestServerTest;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.junit.Test;
import org.osgi.framework.Bundle;
@@ -40,6 +43,7 @@ import org.osgi.framework.Bundle;
* @author Loic Prieur-Drevon
*/
public class XmlManagerServiceTest extends RestServerTest {
+ private static final String PATH = "path";
private static final Bundle XML_CORE_TESTS = Platform.getBundle("org.eclipse.tracecompass.tmf.analysis.xml.core.tests");
private static final GenericType<Map<String, String>> MAP_STRING_STRING_TYPE = new GenericType<Map<String, String>>() {
};
@@ -77,12 +81,10 @@ public class XmlManagerServiceTest extends RestServerTest {
WebTarget traces = application.path("traces");
assertPost(traces, CONTEXT_SWITCHES_KERNEL_STUB);
- WebTarget xmlProviderPath = traces.path(CONTEXT_SWITCHES_KERNEL_UUID.toString())
- .path(DataProviderServiceTest.PROVIDERS_PATH)
- // path to the tree XY data provider from the valid XML file
- .path("org.eclipse.linuxtools.tmf.analysis.xml.core.tests.xy")
- .path(DataProviderServiceTest.TREE_PATH);
- Response xmlTree = xmlProviderPath.request(MediaType.APPLICATION_JSON).get();
+ WebTarget xmlProviderPath = getXYTreeEndpoint(CONTEXT_SWITCHES_KERNEL_UUID.toString(), "org.eclipse.linuxtools.tmf.analysis.xml.core.tests.xy");
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put(DataProviderParameterUtils.REQUESTED_TIME_KEY, Collections.emptyList());
+ Response xmlTree = xmlProviderPath.request().post(Entity.json(new QueryParameters(parameters , Collections.emptyList())));
assertEquals("The end point for the XML data provider should be available.", 200, xmlTree.getStatus());
assertEquals(200, xmlEndpoint.path("test_valid.xml").request().delete().getStatus());
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/AbstractModelStub.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/AbstractModelStub.java
index 0b299ad6d..4860f1b84 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/AbstractModelStub.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/AbstractModelStub.java
@@ -28,6 +28,7 @@ public abstract class AbstractModelStub implements Serializable {
private final long fNbEvents;
private final long fStart;
private final long fEnd;
+ private final String fIndexingStatus;
/**
* Constructor
@@ -43,12 +44,13 @@ public abstract class AbstractModelStub implements Serializable {
* @param end
* the current end time
*/
- public AbstractModelStub(String name, UUID uuid, long nbEvents, long start, long end) {
+ public AbstractModelStub(String name, UUID uuid, long nbEvents, long start, long end, String indexingStatus) {
fName = name;
fUUID = uuid;
fNbEvents = nbEvents;
fStart = start;
fEnd = end;
+ fIndexingStatus = indexingStatus;
}
/**
@@ -96,6 +98,10 @@ public abstract class AbstractModelStub implements Serializable {
return fEnd;
}
+ public String getIndexingStatus() {
+ return fIndexingStatus;
+ }
+
@Override
public int hashCode() {
return Objects.hash(fName, fUUID);
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/DataProviderDescriptorStub.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/DataProviderDescriptorStub.java
new file mode 100644
index 000000000..98f785eb9
--- /dev/null
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/DataProviderDescriptorStub.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs;
+
+import java.io.Serializable;
+import java.util.Objects;
+import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Basic Implementation of the serialized data descriptor model used by clients.
+ *
+ * TODO Equality of two stubs is determined by equality of names, paths and
+ * {@link UUID}, as the start time, end time and number of events may be unknown
+ * due to incomplete indexing.
+ *
+ * @author Bernd Hufmann
+ */
+public class DataProviderDescriptorStub implements Serializable {
+
+ /**
+ * Generated Serial Version UID
+ */
+ private static final long serialVersionUID = -6380168132081665386L;
+ private final String fId;
+ private final String fName;
+ private final String fDescription;
+ private final String fTypeId;
+
+ /**
+ * {@link JsonCreator} Constructor for final fields
+ *
+ * @param id
+ * the id
+ * @param name
+ * the name
+ * @param description
+ * the help text
+ * @param type
+ * the type id
+ *
+ */
+ @JsonCreator
+ public DataProviderDescriptorStub(@JsonProperty("id") String id,
+ @JsonProperty("name") String name,
+ @JsonProperty("description") String description,
+ @JsonProperty("type") String type) {
+ fId = id;
+ fName = name;
+ fDescription = description;
+ fTypeId = type;
+ }
+
+ /**
+ * Gets the ID
+ *
+ * @return the ID
+ */
+ public String getId() {
+ return fId;
+ }
+
+ /**
+ * Gets the name
+ *
+ * @return the name
+ */
+ public String getName() {
+ return fName;
+ }
+
+ /**
+ * Gets the help text
+ *
+ * @return the help text
+ */
+ public String getDescription() {
+ return fDescription;
+ }
+
+ /**
+ * Gets the type ID
+ *
+ * @return the type ID
+ */
+ public String getTypeId() {
+ return fTypeId;
+ }
+
+ @Override
+ public String toString() {
+ return "DataProviderDescriptorStub[fId=" + getId() + ", fName=" + fName + ", fDescription=" + fDescription
+ + ", fTypeId=" + fTypeId+ "]";
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(fId, fName, fDescription, fTypeId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+
+ if (obj instanceof DataProviderDescriptorStub) {
+ DataProviderDescriptorStub other = (DataProviderDescriptorStub) obj;
+ if (!Objects.equals(fId, other.fId)) {
+ return false;
+ }
+ if (!Objects.equals(fName, other.fName)) {
+ return false;
+ }
+ if (!Objects.equals(fDescription, other.fDescription)) {
+ return false;
+ }
+ if (Objects.equals(fTypeId, other.fTypeId)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/ExperimentModelStub.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/ExperimentModelStub.java
index 02fa2ca29..113e9547a 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/ExperimentModelStub.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/ExperimentModelStub.java
@@ -53,8 +53,9 @@ public class ExperimentModelStub extends AbstractModelStub {
@JsonProperty("nbEvents") long nbEvents,
@JsonProperty("start") long start,
@JsonProperty("end") long end,
+ @JsonProperty("indexingStatus") String indexingStatus,
@JsonProperty("traces") Set<TraceModelStub> traces) {
- super(name, uuid, nbEvents, start, end);
+ super(name, uuid, nbEvents, start, end, indexingStatus);
fTraces = traces;
}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/TraceModelStub.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/TraceModelStub.java
index 491e15fbf..e227e5739 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/TraceModelStub.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/stubs/TraceModelStub.java
@@ -54,8 +54,9 @@ public class TraceModelStub extends AbstractModelStub {
@JsonProperty("UUID") UUID uuid,
@JsonProperty("nbEvents") long nbEvents,
@JsonProperty("start") long start,
- @JsonProperty("end") long end) {
- super(name, uuid, nbEvents, start, end);
+ @JsonProperty("end") long end,
+ @JsonProperty("indexingStatus") String indexingStatus) {
+ super(name, uuid, nbEvents, start, end, indexingStatus);
fPath = path;
}
@@ -70,7 +71,7 @@ public class TraceModelStub extends AbstractModelStub {
* the stub's UUID
*/
public TraceModelStub(String name, String path, UUID uuid) {
- this(name, path, uuid, 0, 0L, 0L);
+ this(name, path, uuid, 0, 0L, 0L, "RUNNING");
}
/**
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/utils/RestServerTest.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/utils/RestServerTest.java
index 7763671c0..f7e34592d 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/utils/RestServerTest.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests/src/org/eclipse/tracecompass/incubator/trace/server/jersey/rest/core/tests/utils/RestServerTest.java
@@ -13,6 +13,9 @@ import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -20,21 +23,24 @@ import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Form;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.model.views.QueryParameters;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.webapp.WebApplication;
+import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.DataProviderDescriptorStub;
import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.ExperimentModelStub;
import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.TraceModelStub;
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
+import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor.ProviderType;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+import com.google.common.collect.ImmutableList;
/**
* Rest server test abstract class, handles starting the server in test mode,
@@ -44,7 +50,7 @@ import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
* @author Loic Prieur-Drevon
*/
public abstract class RestServerTest {
- private static final String SERVER = "http://localhost:8378/tracecompass"; //$NON-NLS-1$
+ private static final String SERVER = "http://localhost:8378/tsp/api"; //$NON-NLS-1$
private static final WebApplication fWebApp = new WebApplication(WebApplication.TEST_PORT);
/**
* Traces endpoint path (relative to application).
@@ -54,6 +60,27 @@ public abstract class RestServerTest {
* Experiments endpoint path (relative to application).
*/
public static final String EXPERIMENTS = "experiments";
+
+ /**
+ * Outputs path segment
+ */
+ public static final String OUTPUTS_PATH = "outputs";
+
+ /**
+ * Tree path segment
+ */
+ public static final String TREE_PATH = "tree";
+
+ /**
+ * Time Graph path segment
+ */
+ public static final String TIMEGRAPH_PATH = "timeGraph";
+
+ /**
+ * XY path segment
+ */
+ public static final String XY_PATH = "XY";
+
/**
* <b>name</b> constant
*/
@@ -61,12 +88,14 @@ public abstract class RestServerTest {
/**
* <b>path</b> constant
*/
- public static final String PATH = "path";
+ public static final String URI = "uri";
private static final GenericType<Set<TraceModelStub>> TRACE_MODEL_SET_TYPE = new GenericType<Set<TraceModelStub>>() {
};
private static final GenericType<Set<ExperimentModelStub>> EXPERIMENT_MODEL_SET_TYPE = new GenericType<Set<ExperimentModelStub>>() {
};
+ private static final GenericType<Set<DataProviderDescriptorStub>> DATAPROVIDER_DESCR_MODEL_SET_TYPE = new GenericType<Set<DataProviderDescriptorStub>>() {
+ };
/**
* {@link UUID} for {@link CtfTestTrace#CONTEXT_SWITCHES_UST}.
@@ -89,6 +118,11 @@ public abstract class RestServerTest {
protected static TraceModelStub CONTEXT_SWITCHES_KERNEL_STUB;
/**
+ * Expected toString() of all data providers for this experiment
+ */
+ protected static List<DataProviderDescriptorStub> EXPECTED_DATA_PROVIDER_DESCRIPTOR = null;
+
+ /**
* Create the {@link TraceModelStub}s before running the tests
*
* @throws IOException
@@ -101,6 +135,20 @@ public abstract class RestServerTest {
String contextSwitchesKernelPath = FileLocator.toFileURL(CtfTestTrace.CONTEXT_SWITCHES_KERNEL.getTraceURL()).getPath();
CONTEXT_SWITCHES_KERNEL_STUB = new TraceModelStub("kernel", contextSwitchesKernelPath, CONTEXT_SWITCHES_KERNEL_UUID);
+ ImmutableList.Builder<DataProviderDescriptorStub> b = ImmutableList.builder();
+ b.add(new DataProviderDescriptorStub("org.eclipse.tracecompass.internal.analysis.timing.core.segmentstore.scatter.dataprovider:org.eclipse.linuxtools.lttng2.ust.analysis.callstack",
+ "LTTng-UST CallStack - Latency vs Time",
+ "Show latencies provided by Analysis module: LTTng-UST CallStack",
+ ProviderType.TREE_TIME_XY.name()));
+ b.add(new DataProviderDescriptorStub("org.eclipse.tracecompass.internal.analysis.profiling.callstack.provider.CallStackDataProvider",
+ "Flame Chart",
+ "Show a call stack over time",
+ ProviderType.TIME_GRAPH.name()));
+ b.add(new DataProviderDescriptorStub("org.eclipse.tracecompass.internal.tmf.core.histogram.HistogramDataProvider",
+ "Histogram",
+ "Show a histogram of number of events to time for a trace",
+ ProviderType.TREE_TIME_XY.name()));
+ EXPECTED_DATA_PROVIDER_DESCRIPTOR = b.build();
}
/**
@@ -145,6 +193,42 @@ public abstract class RestServerTest {
}
/**
+ * Get the {@link WebTarget} for the time graph tree endpoint.
+ *
+ * @param UUID
+ * Trace or experiment UUID
+ * @param dataProviderId
+ * Data provider ID
+ * @return The time graph tree endpoint
+ */
+ public static WebTarget getTimeGraphTreeEndpoint(String UUID, String dataProviderId) {
+ return getApplicationEndpoint().path(EXPERIMENTS)
+ .path(UUID)
+ .path(OUTPUTS_PATH)
+ .path(TIMEGRAPH_PATH)
+ .path(dataProviderId)
+ .path(TREE_PATH);
+ }
+
+ /**
+ * Get the {@link WebTarget} for the XY tree endpoint.
+ *
+ * @param UUID
+ * Trace or experiment UUID
+ * @param dataProviderId
+ * Data provider ID
+ * @return The XY tree endpoint
+ */
+ public static WebTarget getXYTreeEndpoint(String UUID, String dataProviderId) {
+ return getApplicationEndpoint().path(EXPERIMENTS)
+ .path(UUID)
+ .path(OUTPUTS_PATH)
+ .path(XY_PATH)
+ .path(dataProviderId)
+ .path(TREE_PATH);
+ }
+
+ /**
* Get the traces currently open on the server.
*
* @param traces
@@ -167,6 +251,17 @@ public abstract class RestServerTest {
}
/**
+ * Get a set of {@link DataProviderDescriptorStub}
+ *
+ * @param outputs
+ * {@link WebTarget} for the outputs endpoint
+ * @return Set of {@link DataProviderDescriptorStub} given by the server
+ */
+ public static Set<DataProviderDescriptorStub> getDataProviderDescriptors(WebTarget outputs) {
+ return outputs.request(MediaType.APPLICATION_JSON).get(DATAPROVIDER_DESCR_MODEL_SET_TYPE);
+ }
+
+ /**
* Post the trace from an expected {@link TraceModelStub}, ensure that the post
* returned correctly and that the returned model was that of the expected stub.
*
@@ -176,9 +271,10 @@ public abstract class RestServerTest {
* expected trace stub
*/
public static void assertPost(WebTarget traces, TraceModelStub stub) {
- Form form = new Form(PATH, stub.getPath());
- form.param(NAME, stub.getName());
- Response response = traces.request().post(Entity.form(form));
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put(NAME, stub.getName());
+ parameters.put(URI, stub.getPath());
+ Response response = traces.request().post(Entity.json(new QueryParameters(parameters , Collections.emptyList())));
int code = response.getStatus();
assertEquals("Failed to POST " + stub.getName() + ", error code=" + code, 200, code);
assertEquals(stub, response.readEntity(TraceModelStub.class));
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/model/views/Filter.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/model/views/Filter.java
new file mode 100644
index 000000000..fcdc42bf9
--- /dev/null
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/model/views/Filter.java
@@ -0,0 +1,104 @@
+/**********************************************************************
+ * Copyright (c) 2019 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ **********************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.model.views;
+
+/**
+ * Filter that is received by the server to be applied on the response.
+ *
+ * @author Simon Delisle
+ */
+public class Filter {
+ private long fId;
+ private String fName;
+ private long fStartTime;
+ private long fEndTime;
+ private String fExpression;
+ private int fTags;
+
+ /**
+ * Constructor.
+ *
+ * @param id
+ * Filter ID
+ * @param name
+ * Human readable name
+ * @param startTime
+ * Filter start time
+ * @param endTime
+ * Filter end time
+ * @param expression
+ * Filter expression (eg. regex)
+ * @param tags
+ * Tags to be apply on responses (with the filter does)
+ */
+ public Filter(long id, String name, long startTime, long endTime, String expression, int tags) {
+ super();
+ fId = id;
+ fName = name;
+ fStartTime = startTime;
+ fEndTime = endTime;
+ fExpression = expression;
+ fTags = tags;
+ }
+
+ /**
+ * Getter for filter ID
+ *
+ * @return Filter ID
+ */
+ public long getId() {
+ return fId;
+ }
+
+ /**
+ * Getter for filter name
+ *
+ * @return Human readable name
+ */
+ public String getName() {
+ return fName;
+ }
+
+ /**
+ * Getter for filter start time
+ *
+ * @return Filter start time
+ */
+ public long getStartTime() {
+ return fStartTime;
+ }
+
+ /**
+ * Getter for filter end time
+ *
+ * @return Filter end time
+ */
+ public long getEndTime() {
+ return fEndTime;
+ }
+
+ /**
+ * Getter for filter expression
+ *
+ * @return Filter expression
+ */
+ public String getExpression() {
+ return fExpression;
+ }
+
+ /**
+ * Getter for filter tags
+ *
+ * @return Tags to apply
+ */
+ public int getTags() {
+ return fTags;
+ }
+}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/model/views/QueryParameters.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/model/views/QueryParameters.java
new file mode 100644
index 000000000..7ca61990a
--- /dev/null
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/model/views/QueryParameters.java
@@ -0,0 +1,57 @@
+/**********************************************************************
+ * Copyright (c) 2019 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ **********************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.model.views;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Definition of a parameters object received by the server from a client.
+ *
+ * @author Simon Delisle
+ */
+public class QueryParameters {
+ private Map<String, Object> parameters;
+ private List<Filter> filters;
+
+ /**
+ * Constructor for Jackson
+ */
+ public QueryParameters() {
+ // Default constructor for Jackson
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param parameters
+ * Map of parameters
+ * @param filters
+ * List of filters
+ */
+ public QueryParameters(Map<String, Object> parameters, List<Filter> filters) {
+ this.parameters = parameters;
+ this.filters = filters;
+ }
+
+ /**
+ * @return Map of parameters
+ */
+ public Map<String, Object> getParameters() {
+ return parameters;
+ }
+
+ /**
+ * @return List of filters
+ */
+ public List<Filter> getFilters() {
+ return filters;
+ }
+}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/DataProviderService.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/DataProviderService.java
index ce10932be..1d547c067 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/DataProviderService.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/DataProviderService.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2017 Ericsson
+ * Copyright (c) 2017, 2019 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
@@ -9,53 +9,44 @@
package org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services;
+import java.util.Arrays;
import java.util.EnumSet;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
import java.util.UUID;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
import javax.ws.rs.Consumes;
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
-import javax.ws.rs.PUT;
+import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.model.views.GenericView;
-import org.eclipse.tracecompass.internal.provisional.tmf.core.model.events.TmfEventTableDataProvider;
-import org.eclipse.tracecompass.internal.provisional.tmf.core.model.events.TmfEventTableFilterModel;
-import org.eclipse.tracecompass.internal.provisional.tmf.core.model.filters.EventTableQueryFilter;
+import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.model.views.QueryParameters;
import org.eclipse.tracecompass.internal.provisional.tmf.core.model.filters.VirtualTableQueryFilter;
-import org.eclipse.tracecompass.internal.provisional.tmf.core.model.table.EventTableLine;
import org.eclipse.tracecompass.internal.provisional.tmf.core.model.table.ITmfVirtualTableDataProvider;
-import org.eclipse.tracecompass.internal.provisional.tmf.core.model.table.ITmfVirtualTableModel;
import org.eclipse.tracecompass.internal.provisional.tmf.core.model.table.IVirtualTableLine;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlOutputElement;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlUtils;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlUtils.OutputType;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.tmf.analysis.xml.core.module.TmfXmlUtils;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.output.XmlDataProviderManager;
import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderManager;
+import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphDataProvider;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphEntryModel;
-import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataModel;
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataProvider;
import org.eclipse.tracecompass.tmf.core.model.xy.ITmfTreeXYDataProvider;
@@ -65,7 +56,6 @@ import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.w3c.dom.Element;
import com.google.common.collect.Iterables;
-import com.google.common.primitives.Longs;
/**
* Service to query the {@link ITmfTreeDataProvider}s
@@ -73,56 +63,52 @@ import com.google.common.primitives.Longs;
* @author Loic Prieur-Drevon
*/
@SuppressWarnings("restriction")
-@Path("/traces/{uuid}/providers/{providerId}")
+@Path("/experiments/{uuid}/outputs")
public class DataProviderService {
+ private static final String WRONG_PARAMETERS = "Wrong query parameters"; //$NON-NLS-1$
private static final String NO_PROVIDER = "Analysis cannot run"; //$NON-NLS-1$
private static final String NO_SUCH_TRACE = "No Such Trace"; //$NON-NLS-1$
private final DataProviderManager manager = DataProviderManager.getInstance();
/**
- * Query the provider for the entry tree
+ * Getter for the list of data provider descriptions
*
* @param uuid
- * desired trace UUID
- * @param providerId
- * Eclipse extension point ID for the data provider to query
- * @param start
- * lower bound for the query
- * @param end
- * upper bound for the query
- * @param nb
- * nanoseconds between two data points
- * @return an {@link GenericView} with the results
+ * UUID of the trace to search for
+ * @return the data provider descriptions with the queried {@link UUID} if it exists.
*/
@GET
- @Path("/tree")
@Produces(MediaType.APPLICATION_JSON)
- public Response getTree(@PathParam("uuid") UUID uuid,
- @PathParam("providerId") String providerId,
- @QueryParam("start") long start,
- @QueryParam("end") @DefaultValue("1") long end,
- @QueryParam("nb") @DefaultValue("2") int nb) {
+ public Response getProviders(@PathParam("uuid") UUID uuid) {
ITmfTrace trace = TraceManagerService.getTraceByUUID(uuid);
if (trace == null) {
- return Response.status(Status.NOT_FOUND).entity(NO_SUCH_TRACE).build();
- }
-
- ITmfTreeDataProvider<? extends @NonNull ITmfTreeDataModel> provider = manager.getDataProvider(trace,
- providerId, ITmfTreeDataProvider.class);
-
- if (provider == null && providerId != null) {
- // try and find the XML provider for the ID.
- provider = getXmlProvider(trace, providerId, EnumSet.allOf(OutputType.class));
+ return Response.status(Status.NOT_FOUND).build();
}
+ List<IDataProviderDescriptor> list = DataProviderManager.getInstance().getAvailableProviders(trace);
- if (provider == null) {
- // The analysis cannot be run on this trace
- return Response.status(Status.METHOD_NOT_ALLOWED).entity(NO_PROVIDER).build();
- }
+ return Response.ok(list).build();
+ }
- TmfModelResponse<?> treeResponse = provider.fetchTree(new TimeQueryFilter(start, end, nb), null);
- return Response.ok(new GenericView<>(trace, treeResponse)).build();
+ /**
+ * Query the provider for the XY tree
+ *
+ * @param uuid
+ * desired trace UUID
+ * @param outputId
+ * Eclipse extension point ID for the data provider to query
+ * @param queryParameters
+ * Parameters to fetch an XY tree as described by
+ * {@link QueryParameters}
+ * @return an {@link GenericView} with the results
+ */
+ @POST
+ @Path("/XY/{outputId}/tree")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getXYTree(@PathParam("uuid") UUID uuid,
+ @PathParam("outputId") String outputId, QueryParameters queryParameters) {
+ return getTree(uuid, outputId, queryParameters);
}
/**
@@ -130,38 +116,29 @@ public class DataProviderService {
*
* @param uuid
* {@link UUID} of the trace to query
- * @param providerId
+ * @param outputId
* Eclipse extension point ID for the data provider to query
- * @param start
- * lower bound for the query
- * @param end
- * upper bound for the query
- * @param nb
- * nanoseconds between two data points
- * @param ids
- * ids of the entries to query
+ * @param queryParameters
+ * Parameters to fetch XY as described by {@link QueryParameters}
* @return an {@link GenericView} with the results
*/
- @GET
- @Path("/xy")
+ @POST
+ @Path("/XY/{outputId}/xy")
+ @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response getXY(@PathParam("uuid") UUID uuid,
- @PathParam("providerId") String providerId,
- @QueryParam("start") long start,
- @QueryParam("end") long end,
- @QueryParam("nb") @Min(1) int nb,
- @QueryParam("ids") @NotNull Set<Long> ids) {
+ @PathParam("outputId") String outputId, QueryParameters queryParameters) {
ITmfTrace trace = TraceManagerService.getTraceByUUID(uuid);
if (trace == null) {
return Response.status(Status.NOT_FOUND).entity(NO_SUCH_TRACE).build();
}
ITmfTreeXYDataProvider<@NonNull ITmfTreeDataModel> provider = manager.getDataProvider(trace,
- providerId, ITmfTreeXYDataProvider.class);
+ outputId, ITmfTreeXYDataProvider.class);
- if (provider == null && providerId != null) {
+ if (provider == null && outputId != null) {
// try and find the XML provider for the ID.
- provider = getXmlProvider(trace, providerId, EnumSet.of(OutputType.XY));
+ provider = getXmlProvider(trace, outputId, EnumSet.of(OutputType.XY));
}
if (provider == null) {
@@ -169,8 +146,62 @@ public class DataProviderService {
return Response.status(Status.METHOD_NOT_ALLOWED).entity(NO_PROVIDER).build();
}
- TmfModelResponse<@NonNull ITmfXyModel> response = provider.fetchXY(new SelectionTimeQueryFilter(start, end, nb, ids), null);
- return Response.ok(new GenericView<>(trace, response)).build();
+ SelectionTimeQueryFilter selectionTimeQueryFilter = FetchParametersUtils.createSelectionTimeQuery(queryParameters.getParameters());
+ if (selectionTimeQueryFilter == null) {
+ return Response.status(Status.UNAUTHORIZED).entity(WRONG_PARAMETERS).build();
+ }
+
+ TmfModelResponse<@NonNull ITmfXyModel> response = provider.fetchXY(queryParameters.getParameters(), null);
+ return Response.ok(response).build();
+ }
+
+ /**
+ * Query the provider for XY tooltip, currently not implemented
+ *
+ * @param uuid
+ * {@link UUID} of the trace to query
+ * @param outputId
+ * Eclipse extension point ID for the data provider to query
+ * @param xValue
+ * Given X value to fetch the tooltip
+ * @param yValue
+ * Given Y value to help fetch the tooltip, used to get the right
+ * point if two points have the same X value
+ * @param entryId
+ * Entry Id or series Id
+ * @return {@link GenericView} with the results
+ */
+ @GET
+ @Path("/XY/{outputId}/tooltip")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getXYTooltip(@PathParam("uuid") UUID uuid,
+ @PathParam("outputId") String outputId,
+ @QueryParam("xValue") long xValue,
+ @QueryParam("yValue") long yValue,
+ @QueryParam("entryId") long entryId) {
+ return Response.status(Status.NOT_IMPLEMENTED).entity("XY tooltip are not implemented yet").build(); //$NON-NLS-1$
+ }
+
+ /**
+ * Query the provider for the time graph tree
+ *
+ * @param uuid
+ * {@link UUID} of the trace to query
+ * @param outputId
+ * Eclipse extension point ID for the data provider to query
+ * @param queryParameters
+ * Parameters to fetch time graph tree as described by
+ * {@link QueryParameters}
+ * @return {@link GenericView} with the results
+ */
+ @POST
+ @Path("/timeGraph/{outputId}/tree")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getTimeGraphTree(@PathParam("uuid") UUID uuid,
+ @PathParam("outputId") String outputId,
+ QueryParameters queryParameters) {
+ return getTree(uuid, outputId, queryParameters);
}
/**
@@ -178,41 +209,39 @@ public class DataProviderService {
*
* @param uuid
* desired trace UUID
- * @param providerId
+ * @param outputId
* Eclipse extension point ID for the data provider to query
- * @param start
- * lower bound for the query
- * @param end
- * upper bound for the query
- * @param nb
- * nanoseconds between two data points
- * @param ids
- * ids of the entries to query
- * @return an {@link GenericView} with the results
+ * @param queryParameters
+ * Parameters to fetch time graph states as described by
+ * {@link QueryParameters}
+ * @return {@link GenericView} with the results
*/
- @GET
- @Path("/states")
+ @POST
+ @Path("/timeGraph/{outputId}/states")
+ @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response getStates(@PathParam("uuid") UUID uuid,
- @PathParam("providerId") String providerId,
- @QueryParam("start") long start,
- @QueryParam("end") long end,
- @QueryParam("nb") int nb,
- @QueryParam("ids") @NotNull Set<Long> ids) {
+ @PathParam("outputId") String outputId,
+ QueryParameters queryParameters) {
ITmfTrace trace = TraceManagerService.getTraceByUUID(uuid);
if (trace == null) {
return Response.status(Status.NOT_FOUND).entity(NO_SUCH_TRACE).build();
}
- ITimeGraphDataProvider<@NonNull ITimeGraphEntryModel> provider = getTimeGraphProvider(trace, providerId);
+ ITimeGraphDataProvider<@NonNull ITimeGraphEntryModel> provider = getTimeGraphProvider(trace, outputId);
if (provider == null) {
// The analysis cannot be run on this trace
return Response.status(Status.METHOD_NOT_ALLOWED).entity(NO_PROVIDER).build();
}
- TmfModelResponse<List<@NonNull ITimeGraphRowModel>> response = provider.fetchRowModel(new SelectionTimeQueryFilter(start, end, nb, ids), null);
- return Response.ok(new GenericView<>(trace, response)).build();
+ SelectionTimeQueryFilter selectionTimeQueryFilter = FetchParametersUtils.createSelectionTimeQuery(queryParameters.getParameters());
+ if (selectionTimeQueryFilter == null) {
+ return Response.status(Status.UNAUTHORIZED).entity(WRONG_PARAMETERS).build();
+ }
+
+ TmfModelResponse<TimeGraphModel> response = provider.fetchRowModel(queryParameters.getParameters(), null);
+ return Response.ok(response).build();
}
/**
@@ -220,38 +249,39 @@ public class DataProviderService {
*
* @param uuid
* desired trace UUID
- * @param providerId
+ * @param outputId
* Eclipse extension point ID for the data provider to query
- * @param start
- * lower bound for the query
- * @param end
- * upper bound for the query
- * @param nb
- * nanoseconds between two data points
- * @return an {@link GenericView} with the results
+ * @param queryParameters
+ * Parameters to fetch time graph arrows as described by
+ * {@link QueryParameters}
+ * @return {@link GenericView} with the results
*/
- @GET
- @Path("/arrows")
+ @POST
+ @Path("/timeGraph/{outputId}/arrows")
+ @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response getArrows(@PathParam("uuid") UUID uuid,
- @PathParam("providerId") String providerId,
- @QueryParam("start") long start,
- @QueryParam("end") long end,
- @QueryParam("nb") int nb) {
+ @PathParam("outputId") String outputId,
+ QueryParameters queryParameters) {
ITmfTrace trace = TraceManagerService.getTraceByUUID(uuid);
if (trace == null) {
return Response.status(Status.NOT_FOUND).entity(NO_SUCH_TRACE).build();
}
- ITimeGraphDataProvider<@NonNull ITimeGraphEntryModel> provider = getTimeGraphProvider(trace, providerId);
+ ITimeGraphDataProvider<@NonNull ITimeGraphEntryModel> provider = getTimeGraphProvider(trace, outputId);
if (provider == null) {
// The analysis cannot be run on this trace
return Response.status(Status.METHOD_NOT_ALLOWED).entity(NO_PROVIDER).build();
}
- TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> response = provider.fetchArrows(new TimeQueryFilter(start, end, nb), null);
- return Response.ok(new GenericView<>(trace, response)).build();
+ TimeQueryFilter timeQueryFilter = FetchParametersUtils.createTimeQuery(queryParameters.getParameters());
+ if (timeQueryFilter == null) {
+ return Response.status(Status.UNAUTHORIZED).entity(WRONG_PARAMETERS).build();
+ }
+
+ TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> response = provider.fetchArrows(queryParameters.getParameters(), null);
+ return Response.ok(response).build();
}
/**
@@ -259,165 +289,112 @@ public class DataProviderService {
*
* @param uuid
* desired trace UUID
- * @param providerId
+ * @param outputId
* Eclipse extension point ID for the data provider to query
- * @param start
- * lower bound for the query
- * @param end
- * upper bound for the query
- * @param nb
- * nanoseconds between two data points
- * @param ids
- * ids of the entries to query
- * @return an {@link GenericView} with the results
+ * @param time
+ * Time where to fetch the tooltip
+ * @param entryId
+ * Entry Id to identify the state for the tooltip
+ * @param targetId
+ * Target Id if the tooltip is for an arrow
+ * @return {@link GenericView} with the results
*/
@GET
- @Path("/tooltip")
+ @Path("/timeGraph/{outputId}/tooltip")
@Produces(MediaType.APPLICATION_JSON)
- public Response getTooltip(@PathParam("uuid") UUID uuid,
- @PathParam("providerId") String providerId,
- @QueryParam("start") long start,
- @QueryParam("end") long end,
- @QueryParam("nb") int nb,
- @QueryParam("ids") @NotNull Set<Long> ids) {
+ public Response getTimeGraphTooltip(@PathParam("uuid") UUID uuid,
+ @PathParam("outputId") String outputId,
+ @QueryParam("time") long time,
+ @QueryParam("entryId") long entryId,
+ @QueryParam("targetId") long targetId) {
ITmfTrace trace = TraceManagerService.getTraceByUUID(uuid);
if (trace == null) {
return Response.status(Status.NOT_FOUND).entity(NO_SUCH_TRACE).build();
}
- ITimeGraphDataProvider<@NonNull ITimeGraphEntryModel> provider = getTimeGraphProvider(trace, providerId);
+ ITimeGraphDataProvider<@NonNull ITimeGraphEntryModel> provider = getTimeGraphProvider(trace, outputId);
if (provider == null) {
// The analysis cannot be run on this trace
return Response.status(Status.METHOD_NOT_ALLOWED).entity(NO_PROVIDER).build();
}
-
- TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> response = provider.fetchTooltip(new SelectionTimeQueryFilter(start, end, nb, ids), null);
- return Response.ok(new GenericView<>(trace, response)).build();
+ TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> response = provider.fetchTooltip(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(time, time, 1, Arrays.asList(entryId, targetId))), null);
+ return Response.ok(response).build();
}
- private ITimeGraphDataProvider<@NonNull ITimeGraphEntryModel> getTimeGraphProvider(@NonNull ITmfTrace trace, String providerId) {
+ private ITimeGraphDataProvider<@NonNull ITimeGraphEntryModel> getTimeGraphProvider(@NonNull ITmfTrace trace, String outputId) {
ITimeGraphDataProvider<@NonNull ITimeGraphEntryModel> provider = manager.getDataProvider(trace,
- providerId, ITimeGraphDataProvider.class);
+ outputId, ITimeGraphDataProvider.class);
- if (provider == null && providerId != null) {
+ if (provider == null && outputId != null) {
// try and find the XML provider for the ID.
- provider = getXmlProvider(trace, providerId, EnumSet.of(OutputType.TIME_GRAPH));
+ provider = getXmlProvider(trace, outputId, EnumSet.of(OutputType.TIME_GRAPH));
}
return provider;
}
/**
- * Query the provider for table lines
+ * Query the provider for table columns
*
* @param uuid
- * Trace UUID
- * @param providerId
+ * desired trace UUID
+ * @param outputId
* Eclipse extension point ID for the data provider to query
- * @param low
- * Low index
- * @param size
- * Number of lines to return
- * @param columnIds
- * Desired column IDs
- * @return A {@link GenericView} with the results
+ * @param queryParameters
+ * Parameters to fetch table columns as described by
+ * {@link QueryParameters}
+ * @return {@link GenericView} with the results
*/
- @GET
- @Path("/lines")
+ @POST
+ @Path("/table/{outputId}/columns")
+ @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
- public Response getLines(@PathParam("uuid") UUID uuid,
- @PathParam("providerId") String providerId,
- @QueryParam("low") @Min(0) long low,
- @QueryParam("size") @Min(0) int size,
- @QueryParam("columnId") List<@NonNull Long> columnIds) {
-
- ITmfTrace trace = TraceManagerService.getTraceByUUID(uuid);
- if (trace == null) {
- return Response.status(Status.NOT_FOUND).entity(NO_SUCH_TRACE).build();
- }
-
- ITmfVirtualTableDataProvider<? extends IVirtualTableLine, ? extends ITmfTreeDataModel> provider = manager.getDataProvider(trace, providerId, ITmfVirtualTableDataProvider.class);
- if (provider == null) {
- return Response.status(Status.METHOD_NOT_ALLOWED).entity(NO_PROVIDER).build();
- }
-
- VirtualTableQueryFilter queryFilter = new VirtualTableQueryFilter(columnIds, low, size);
- TmfModelResponse<?> response = provider.fetchLines(queryFilter, null);
- return Response.ok(new GenericView<>(trace, response)).build();
+ public Response getColumns(@PathParam("uuid") UUID uuid,
+ @PathParam("outputId") String outputId,
+ QueryParameters queryParameters) {
+ return getTree(uuid, outputId, queryParameters);
}
/**
- * Query the provider for event table lines with filters
+ * Query the provider for table lines
*
* @param uuid
- * Trace UUID
- * @param providerId
+ * desired trace UUID
+ * @param outputId
* Eclipse extension point ID for the data provider to query
- * @param low
- * Low index
- * @param size
- * Number of lines to return
- * @param columnIds
- * Desired column IDs
- * @param presetFilter
- * List of preset filter IDs to apply
- * @param isCollapseFilterEnabled
- * True if a collapse filter should be applied
- * @param multivaluedMap
- * Map that contains the table filter (column ID with the associated
- * regex)
- * @return A {@link GenericView} with the results
+ * @param queryParameters
+ * Parameters to fetch table lines as described by
+ * {@link QueryParameters}
+ * @return {@link GenericView} with the results
*/
- @PUT
- @Path("/lines")
- @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ @POST
+ @Path("/table/{outputId}/lines")
+ @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response getLines(@PathParam("uuid") UUID uuid,
- @PathParam("providerId") String providerId,
- @QueryParam("low") @Min(0) long low,
- @QueryParam("size") @Min(0) int size,
- @QueryParam("columnId") List<@NonNull Long> columnIds,
- @FormParam("presetFilterId") List<@NonNull String> presetFilter,
- @FormParam("collapseFilter") boolean isCollapseFilterEnabled,
- MultivaluedMap<@NonNull String, @NonNull String> multivaluedMap) {
-
+ @PathParam("outputId") String outputId,
+ QueryParameters queryParameters) {
ITmfTrace trace = TraceManagerService.getTraceByUUID(uuid);
if (trace == null) {
return Response.status(Status.NOT_FOUND).entity(NO_SUCH_TRACE).build();
}
- TmfEventTableDataProvider provider = manager.getDataProvider(trace, providerId, TmfEventTableDataProvider.class);
+ ITmfVirtualTableDataProvider<? extends IVirtualTableLine, ? extends ITmfTreeDataModel> provider = manager.getDataProvider(trace, outputId, ITmfVirtualTableDataProvider.class);
if (provider == null) {
return Response.status(Status.METHOD_NOT_ALLOWED).entity(NO_PROVIDER).build();
}
- /*
- * The multivaluedMap contains all the entry from the form, including the
- * presetFilter list and the collapse boolean. In order to extract the table
- * filters (mapping between column ID and regex) the tryParse is use to capture
- * just the keys that are longs (column IDs)
- */
- Map<@NonNull Long, @NonNull String> tableFilter = null;
- for (Entry<String, List<String>> paramEntry : multivaluedMap.entrySet()) {
- Long columnId = Longs.tryParse(paramEntry.getKey());
- if (columnId == null) {
- continue;
- }
-
- if (tableFilter == null) {
- tableFilter = new HashMap<>();
- }
- tableFilter.put(columnId, paramEntry.getValue().get(0));
+ VirtualTableQueryFilter tableQueryFilter = FetchParametersUtils.createVirtualTableQueryFilter(queryParameters.getParameters());
+ if (tableQueryFilter == null) {
+ return Response.status(Status.UNAUTHORIZED).entity(WRONG_PARAMETERS).build();
}
-
- TmfEventTableFilterModel filters = new TmfEventTableFilterModel(tableFilter, null, presetFilter, null, isCollapseFilterEnabled);
- EventTableQueryFilter queryFilter = new EventTableQueryFilter(columnIds, low, size, filters);
- TmfModelResponse<@NonNull ITmfVirtualTableModel<@NonNull EventTableLine>> response = provider.fetchLines(queryFilter, null);
- return Response.ok(new GenericView<>(trace, response)).build();
+ TmfModelResponse<?> response = provider.fetchLines(queryParameters.getParameters(), null);
+ return Response.ok(response).build();
}
/**
- * Get the XML data provider for a trace, provider id and XML {@link OutputType}
+ * Get the XML data provider for a trace, provider id and XML
+ * {@link OutputType}
*
* @param trace
* the queried trace
@@ -425,11 +402,10 @@ public class DataProviderService {
* the queried ID
* @param types
* the data provider type
- * @return the provider if an XML containing the ID exists and applies to the
- * trace, else null
+ * @return the provider if an XML containing the ID exists and applies to
+ * the trace, else null
*/
- private static <@Nullable P extends ITmfTreeDataProvider<? extends @NonNull ITmfTreeDataModel>> P
- getXmlProvider(@NonNull ITmfTrace trace, @NonNull String id, EnumSet<OutputType> types) {
+ private static <@Nullable P extends ITmfTreeDataProvider<? extends @NonNull ITmfTreeDataModel>> P getXmlProvider(@NonNull ITmfTrace trace, @NonNull String id, EnumSet<OutputType> types) {
for (OutputType viewType : types) {
for (XmlOutputElement element : Iterables.filter(XmlUtils.getXmlOutputElements().values(),
element -> element.getXmlElem().equals(viewType.getXmlElem()) && id.equals(element.getId()))) {
@@ -444,4 +420,31 @@ public class DataProviderService {
return null;
}
+ private Response getTree(UUID uuid, String outputId, QueryParameters queryParameters) {
+ ITmfTrace trace = TraceManagerService.getTraceByUUID(uuid);
+ if (trace == null) {
+ return Response.status(Status.NOT_FOUND).entity(NO_SUCH_TRACE).build();
+ }
+
+ ITmfTreeDataProvider<? extends @NonNull ITmfTreeDataModel> provider = manager.getDataProvider(trace,
+ outputId, ITmfTreeDataProvider.class);
+
+ if (provider == null && outputId != null) {
+ // try and find the XML provider for the ID.
+ provider = getXmlProvider(trace, outputId, EnumSet.allOf(OutputType.class));
+ }
+
+ if (provider == null) {
+ // The analysis cannot be run on this trace
+ return Response.status(Status.METHOD_NOT_ALLOWED).entity(NO_PROVIDER).build();
+ }
+
+ TimeQueryFilter timeQueryFilter = FetchParametersUtils.createTimeQuery(queryParameters.getParameters());
+ if (timeQueryFilter == null) {
+ return Response.status(Status.UNAUTHORIZED).entity(WRONG_PARAMETERS).build();
+ }
+
+ TmfModelResponse<?> treeResponse = provider.fetchTree(queryParameters.getParameters(), null);
+ return Response.ok(treeResponse).build();
+ }
}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/ExperimentManagerService.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/ExperimentManagerService.java
index 12913dcf3..ea1038ec6 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/ExperimentManagerService.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/ExperimentManagerService.java
@@ -80,6 +80,14 @@ public class ExperimentManagerService {
return Response.status(Status.NOT_FOUND).build();
}
+ @GET
+ @Path("/{uuid}/outputs")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getOutputs(@PathParam("uuid") UUID uuid) {
+ return Response.status(Status.NOT_IMPLEMENTED).entity("Not implemented for " + uuid).build();
+ }
+
+
/**
* Delete an experiment by {@link UUID}.
*
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/FilterService.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/FilterService.java
new file mode 100644
index 000000000..511867261
--- /dev/null
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/FilterService.java
@@ -0,0 +1,102 @@
+/**********************************************************************
+ * Copyright (c) 2019 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ **********************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+/**
+ * Service to manage filters
+ *
+ * @author Simon Delisle
+ */
+@Path("/filters")
+public class FilterService {
+
+ /**
+ * Get a list of all the filters available on the server
+ *
+ * @return List of filters
+ */
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getFilters() {
+ return Response.status(Status.NOT_IMPLEMENTED).build();
+ }
+
+ /**
+ * Create a new filter on the server
+ *
+ * @param filter
+ * Filter to create
+ * @return Created filter
+ */
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response createFilter(Object filter) {
+ return Response.status(Status.NOT_IMPLEMENTED).build();
+ }
+
+ /**
+ * Get a specific filter
+ *
+ * @param filterId
+ * Filter Id
+ * @return Filter
+ */
+ @GET
+ @Path("/{filterId}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getFilter(@PathParam("filterId") String filterId) {
+ return Response.status(Status.NOT_IMPLEMENTED).build();
+ }
+
+ /**
+ * Update a specific filter
+ *
+ * @param filterId
+ * Filter Id
+ * @param filter
+ * Filter used to update the given filter
+ * @return Updated filter
+ */
+ @PUT
+ @Path("/{filterId}")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response updateFilter(@PathParam("filterId") String filterId,
+ Object filter) {
+ return Response.status(Status.NOT_IMPLEMENTED).build();
+ }
+
+ /**
+ * Delete a specific filter
+ *
+ * @param filterId
+ * Id of the filter to delete
+ * @return Deleted filter
+ */
+ @DELETE
+ @Path("/{filterId}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response deleteFilter(@PathParam("filterId") String filterId) {
+ return Response.status(Status.NOT_IMPLEMENTED).build();
+ }
+}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/TraceManagerService.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/TraceManagerService.java
index 7472064d9..e24eda007 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/TraceManagerService.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/services/TraceManagerService.java
@@ -12,13 +12,12 @@ package org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.cor
import java.io.File;
import java.nio.file.Paths;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
-import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@@ -40,6 +39,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.Activator;
+import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.model.views.QueryParameters;
import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
@@ -83,20 +83,20 @@ public class TraceManagerService {
* Method to open the trace, initialize it, index it and add it to the trace
* manager.
*
- * @param name
- * the name to assign to the trace files
- * @param path
- * the path to the trace
- * @param typeID
- * the ID of a trace (like "o.e.l.specifictrace" )
+ * @param queryParameters
+ * Parameters to post a trace as described by
+ * {@link QueryParameters}
* @return the new trace model object or the exception if it failed to load.
*/
@POST
- @Consumes({ MediaType.APPLICATION_FORM_URLENCODED })
- @Produces({ MediaType.APPLICATION_JSON })
- public Response putTrace(@FormParam("name") @NotNull @Size(min = 1) String name,
- @FormParam("path") String path,
- @FormParam("typeID") String typeID) {
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response putTrace(QueryParameters queryParameters) {
+ Map<String, Object> parameters = queryParameters.getParameters();
+ String name = (String) parameters.get("name");
+ String path = (String) parameters.get("uri");
+ Object typeIDObject = parameters.get("typeID");
+ String typeID = typeIDObject != null ? (String) typeIDObject : "";
Optional<@NonNull ITmfTrace> optional = Iterables.tryFind(TmfTraceManager.getInstance().getOpenedTraces(), t -> t.getPath().equals(path));
if (optional.isPresent()) {
return Response.status(Status.CONFLICT).entity(optional.get()).build();
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/DataProviderDescriptorSerializer.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/DataProviderDescriptorSerializer.java
new file mode 100644
index 000000000..cf72a3f73
--- /dev/null
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/DataProviderDescriptorSerializer.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.webapp;
+
+import java.io.IOException;
+
+import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+
+/**
+ * {@link StdSerializer} for {@link IDataProviderDescriptor} to avoid building intermediate
+ * representations.
+ *
+ * @author Bernd Hufmann
+ */
+public class DataProviderDescriptorSerializer extends StdSerializer<IDataProviderDescriptor> {
+
+ /**
+ * Generated serialVersionUID
+ */
+ private static final long serialVersionUID = 9170252203750031947L;
+
+ /**
+ * Public constructor
+ */
+ public DataProviderDescriptorSerializer() {
+ super(IDataProviderDescriptor.class);
+ }
+
+ @Override
+ public void serialize(IDataProviderDescriptor value, JsonGenerator gen, SerializerProvider provider) throws IOException {
+ gen.writeStartObject();
+ gen.writeStringField("id", value.getId()); //$NON-NLS-1$
+ gen.writeStringField("name", value.getName()); //$NON-NLS-1$
+ gen.writeStringField("description", value.getDescription()); //$NON-NLS-1$
+ gen.writeStringField("type", value.getType().name()); //$NON-NLS-1$
+ gen.writeEndObject();
+ }
+
+}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/SeriesModelSerializer.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/SeriesModelSerializer.java
new file mode 100644
index 000000000..aca4e8dee
--- /dev/null
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/SeriesModelSerializer.java
@@ -0,0 +1,50 @@
+/**********************************************************************
+ * Copyright (c) 2019 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ **********************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.webapp;
+
+import java.io.IOException;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.tmf.core.model.xy.ISeriesModel;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+
+/**
+ * Serializer for XY series model {@link ISeriesModel}
+ *
+ * @author Simon Delisle
+ */
+public class SeriesModelSerializer extends StdSerializer<@NonNull ISeriesModel> {
+
+ /**
+ * Generated serialVersionUID
+ */
+ private static final long serialVersionUID = -4359431726167157401L;
+
+ /**
+ * Constructor.
+ */
+ protected SeriesModelSerializer() {
+ super(ISeriesModel.class);
+ }
+
+ @Override
+ public void serialize(ISeriesModel value, JsonGenerator gen, SerializerProvider provider) throws IOException {
+ gen.writeStartObject();
+ gen.writeNumberField("id", value.getId()); //$NON-NLS-1$
+ gen.writeStringField("name", value.getName()); //$NON-NLS-1$
+ gen.writeObjectField("xValues", value.getXAxis()); //$NON-NLS-1$
+ gen.writeObjectField("yValues", value.getData()); //$NON-NLS-1$
+ gen.writeEndObject();
+ }
+
+}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/TraceSerializer.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/TraceSerializer.java
index 06547a38e..165d419a8 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/TraceSerializer.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/TraceSerializer.java
@@ -48,6 +48,9 @@ public class TraceSerializer extends StdSerializer<@NonNull ITmfTrace> {
gen.writeNumberField("nbEvents", value.getNbEvents()); //$NON-NLS-1$
gen.writeNumberField("start", value.getStartTime().toNanos()); //$NON-NLS-1$
gen.writeNumberField("end", value.getEndTime().toNanos()); //$NON-NLS-1$
+ // TODO Find a better way, no support for cancel
+ String indexingStatus = value.isIndexing() ? "RUNNING" : "COMPLETED"; //$NON-NLS-1$ //$NON-NLS-2$
+ gen.writeStringField("indexingStatus", indexingStatus); //$NON-NLS-1$
gen.writeEndObject();
}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/WebApplication.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/WebApplication.java
index 09378c9ff..59c490a5d 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/WebApplication.java
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/WebApplication.java
@@ -15,9 +15,13 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services.DataProviderService;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services.ExperimentManagerService;
+import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services.FilterService;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services.TraceManagerService;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services.XmlManagerService;
+import org.eclipse.tracecompass.internal.tmf.core.model.DataProviderDescriptor;
import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
+import org.eclipse.tracecompass.tmf.core.model.xy.ISeriesModel;
+import org.eclipse.tracecompass.tmf.core.model.xy.ITmfXyModel;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
import org.glassfish.jersey.server.ResourceConfig;
@@ -37,7 +41,7 @@ import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
*/
public class WebApplication {
- private static final String CONTEXT_PATH = "/tracecompass"; //$NON-NLS-1$
+ private static final String CONTEXT_PATH = "/tsp/api"; //$NON-NLS-1$
private static final String PATH_SPEC = "/*"; //$NON-NLS-1$
/**
* Port value which boots the server in testing mode.
@@ -80,6 +84,7 @@ public class WebApplication {
rc.register(TraceManagerService.class);
rc.register(ExperimentManagerService.class);
rc.register(DataProviderService.class);
+ rc.register(FilterService.class);
rc.register(XmlManagerService.class);
rc.register(CORSFilter.class);
rc.register(registerCustomMappers());
@@ -116,6 +121,9 @@ public class WebApplication {
SimpleModule module = new SimpleModule();
module.addSerializer(ITmfTrace.class, new TraceSerializer());
module.addSerializer(TmfExperiment.class, new ExperimentSerializer());
+ module.addSerializer(DataProviderDescriptor.class, new DataProviderDescriptorSerializer());
+ module.addSerializer(ITmfXyModel.class, new XYModelSerializer());
+ module.addSerializer(ISeriesModel.class, new SeriesModelSerializer());
mapper.registerModule(module);
return provider;
}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/XYModelSerializer.java b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/XYModelSerializer.java
new file mode 100644
index 000000000..3684ad1ed
--- /dev/null
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core/src/org/eclipse/tracecompass/incubator/internal/trace/server/jersey/rest/core/webapp/XYModelSerializer.java
@@ -0,0 +1,48 @@
+/**********************************************************************
+ * Copyright (c) 2019 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ **********************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.webapp;
+
+import java.io.IOException;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.tmf.core.model.xy.ITmfXyModel;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+
+/**
+ * Serializer for XY model {@link ITmfXyModel}
+ *
+ * @author Simon Delisle
+ */
+public class XYModelSerializer extends StdSerializer<@NonNull ITmfXyModel> {
+
+ /**
+ * Generated serialVersionUID
+ */
+ private static final long serialVersionUID = -7271194941789981571L;
+
+ /**
+ * Constructor.
+ */
+ protected XYModelSerializer() {
+ super(ITmfXyModel.class);
+ }
+
+ @Override
+ public void serialize(@NonNull ITmfXyModel value, JsonGenerator gen, SerializerProvider provider) throws IOException {
+ gen.writeStartObject();
+ gen.writeStringField("title", value.getTitle()); //$NON-NLS-1$
+ gen.writeObjectField("series", value.getData()); //$NON-NLS-1$
+ gen.writeEndObject();
+ }
+
+}
diff --git a/trace-server/org.eclipse.tracecompass.incubator.trace.server.product/pom.xml b/trace-server/org.eclipse.tracecompass.incubator.trace.server.product/pom.xml
index 78789db42..91b7784c7 100644
--- a/trace-server/org.eclipse.tracecompass.incubator.trace.server.product/pom.xml
+++ b/trace-server/org.eclipse.tracecompass.incubator.trace.server.product/pom.xml
@@ -71,6 +71,126 @@
<profiles>
<profile>
+ <id>sign-update-site</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-director-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <executions>
+ <execution>
+ <id>materialize-products</id>
+ <goals>
+ <goal>materialize-products</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>archive-products</id>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <goal>archive-products</goal>
+ </goals>
+ <configuration>
+ <formats>
+ <linux>tar.gz</linux>
+ <macosx>tar.gz</macosx>
+ <solaris>zip</solaris>
+ <win32>zip</win32>
+ </formats>
+ </configuration>
+ </execution>
+ </executions>
+ <configuration>
+ <products>
+ <product>
+ <archiveFileName>${archiveFileName}</archiveFileName>
+ <id>${productId}</id>
+ <rootFolder>${rootFolder}</rootFolder>
+ <rootFolders>
+ <macosx>${rootFolderMac}</macosx>
+ </rootFolders>
+ </product>
+ </products>
+ <source>repository</source>
+ </configuration>
+ </plugin>
+<!--
+ <plugin>
+ <groupId>org.eclipse.cbi.maven.plugins</groupId>
+ <artifactId>eclipse-macsigner-plugin</artifactId>
+ <version>${cbi-plugins.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ <configuration>
+ <signFiles>
+ <signFile>${project.build.directory}/products/${productId}/macosx/cocoa/x86_64/${rootFolderMac}</signFile>
+ </signFiles>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ -->
+ </plugins>
+ </build>
+ </profile>
+ <!-- Deploy RCP builds and update site to the downloads area -->
+ <profile>
+ <id>deploy-rcp</id>
+ <properties>
+ <rcpDestination>/home/data/httpd/download.eclipse.org/tracecompass.incubator/trace-server/rcp/</rcpDestination>
+ <rcpSiteDestination>/home/data/httpd/download.eclipse.org/tracecompass.incubator/trace-server/rcp-repository</rcpSiteDestination>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>deploy</id>
+ <phase>install</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <target>
+ <!-- Cleanup the "rcp" destination, and copy over the new archives -->
+ <delete includeemptydirs="false">
+ <fileset dir="${rcpDestination}">
+ <include name="*.tar.gz" />
+ <include name="*.zip" />
+ </fileset>
+ </delete>
+ <copy includeemptydirs="false" todir="${rcpDestination}">
+ <fileset dir="target/products">
+ <include name="trace-compass-*" />
+ </fileset>
+ </copy>
+
+ <!-- Cleanup the "rcp-repository" update site, and copy over the new one -->
+ <delete includeemptydirs="false">
+ <fileset
+ dir="${rcpSiteDestination}">
+ <include name="**" />
+ </fileset>
+ </delete>
+ <copy includeemptydirs="false" todir="${rcpSiteDestination}">
+ <fileset dir="target/repository">
+ <include name="**" />
+ </fileset>
+ </copy>
+ </target>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
<id>build-one-rcp</id>
<build>
<plugins>
diff --git a/trace-server/pom.xml b/trace-server/pom.xml
index 1030c9745..49e5abd20 100644
--- a/trace-server/pom.xml
+++ b/trace-server/pom.xml
@@ -28,7 +28,7 @@
<module>org.eclipse.tracecompass.incubator.trace.server.jersey.rest</module>
<module>org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core</module>
<module>org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests</module>
- <!--module>org.eclipse.tracecompass.incubator.trace.server.product</module-->
+ <module>org.eclipse.tracecompass.incubator.trace.server.product</module>
<!-- insert modules here -->
</modules>
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.opentracing.core/src/org/eclipse/tracecompass/incubator/internal/opentracing/core/analysis/spanlife/SpanLifeDataProvider.java b/tracetypes/org.eclipse.tracecompass.incubator.opentracing.core/src/org/eclipse/tracecompass/incubator/internal/opentracing/core/analysis/spanlife/SpanLifeDataProvider.java
index caa88aaa1..3385fcdf0 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.opentracing.core/src/org/eclipse/tracecompass/incubator/internal/opentracing/core/analysis/spanlife/SpanLifeDataProvider.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.opentracing.core/src/org/eclipse/tracecompass/incubator/internal/opentracing/core/analysis/spanlife/SpanLifeDataProvider.java
@@ -23,13 +23,14 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.internal.opentracing.core.analysis.spanlife.SpanLifeEntryModel.LogEvent;
import org.eclipse.tracecompass.incubator.internal.opentracing.core.event.IOpenTracingConstants;
-import org.eclipse.tracecompass.internal.tmf.core.model.filters.TimeGraphStateQueryFilter;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.internal.tmf.core.model.timegraph.AbstractTimeGraphDataProvider;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.AttributeNotFoundException;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.exceptions.TimeRangeException;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.model.CommonStatusMessage;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
@@ -37,8 +38,10 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
@@ -83,13 +86,17 @@ public class SpanLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
@Override
- public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
@Override
- public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
ITmfStateSystem ss = getAnalysisModule().getStateSystem();
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(fetchParameters);
+ if (filter == null) {
+ return new TmfModelResponse<>(null, ITmfResponse.Status.FAILED, CommonStatusMessage.INCORRECT_QUERY_PARAMETERS);
+ }
Map<@NonNull Long, @NonNull Integer> entries = getSelectedEntries(filter);
Collection<@NonNull Integer> quarks = entries.values();
long startTime = filter.getStart();
@@ -143,27 +150,28 @@ public class SpanLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
@Override
- protected @Nullable List<@NonNull ITimeGraphRowModel> getRowModel(@NonNull ITmfStateSystem ss, @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @Nullable TimeGraphModel getRowModel(@NonNull ITmfStateSystem ss, Map<String, Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(),
Comparator.comparing(ITmfStateInterval::getStartTime));
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(parameters);
Map<@NonNull Long, @NonNull Integer> entries = getSelectedEntries(filter);
Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime());
/* Do the actual query */
for (ITmfStateInterval interval : ss.query2D(entries.values(), times)) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
intervals.put(interval.getAttribute(), interval);
}
- Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull String>>> predicates = new HashMap<>();
- if (filter instanceof TimeGraphStateQueryFilter) {
- TimeGraphStateQueryFilter timeEventFilter = (TimeGraphStateQueryFilter) filter;
- predicates.putAll(computeRegexPredicate(timeEventFilter));
+ Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates = new HashMap<>();
+ Multimap<@NonNull Integer, @NonNull String> regexesMap = DataProviderParameterUtils.extractRegexFilter(parameters);
+ if (regexesMap != null) {
+ predicates.putAll(computeRegexPredicate(regexesMap));
}
List<@NonNull ITimeGraphRowModel> rows = new ArrayList<>();
for (Map.Entry<@NonNull Long, @NonNull Integer> entry : entries.entrySet()) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
List<ITimeGraphState> eventList = new ArrayList<>();
@@ -177,7 +185,7 @@ public class SpanLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNull
rows.add(new TimeGraphRowModel(entry.getKey(), eventList));
}
- return rows;
+ return new TimeGraphModel(rows);
}
@Override
@@ -186,16 +194,16 @@ public class SpanLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
@Override
- protected @NonNull List<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @NonNull TmfTreeModel<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, Map<String, Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
Builder<@NonNull TimeGraphEntryModel> builder = new Builder<>();
long rootId = getId(ITmfStateSystem.ROOT_ATTRIBUTE);
- builder.add(new TimeGraphEntryModel(rootId, -1, String.valueOf(getTrace().getName()), ss.getStartTime(), ss.getCurrentEndTime()));
+ builder.add(new TimeGraphEntryModel(rootId, -1, Collections.singletonList(String.valueOf(getTrace().getName())), ss.getStartTime(), ss.getCurrentEndTime()));
for (int traceQuark : ss.getSubAttributes(ITmfStateSystem.ROOT_ATTRIBUTE, false)) {
addTrace(ss, builder, traceQuark, rootId);
}
- return builder.build();
+ return new TmfTreeModel<>(Collections.emptyList(), builder.build());
}
private void addTrace(ITmfStateSystem ss, Builder<@NonNull TimeGraphEntryModel> builder, int quark, long parentId) {
@@ -215,7 +223,7 @@ public class SpanLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
long traceQuarkId = getId(quark);
- builder.add(new TimeGraphEntryModel(traceQuarkId, parentId, ss.getAttributeName(quark), ss.getStartTime(), ss.getCurrentEndTime()));
+ builder.add(new TimeGraphEntryModel(traceQuarkId, parentId, Collections.singletonList(ss.getAttributeName(quark)), ss.getStartTime(), ss.getCurrentEndTime()));
int ustSpansQuark;
try {
@@ -242,7 +250,7 @@ public class SpanLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
} catch (IndexOutOfBoundsException | TimeRangeException | StateSystemDisposedException e) {
}
- builder.add(new SpanLifeEntryModel(childId, parentId, getSpanName(childName), ss.getStartTime(), ss.getCurrentEndTime(), logs, getErrorTag(childName), getProcessName(childName)));
+ builder.add(new SpanLifeEntryModel(childId, parentId, Collections.singletonList(getSpanName(childName)), ss.getStartTime(), ss.getCurrentEndTime(), logs, getErrorTag(childName), getProcessName(childName)));
addChildren(ss, builder, child, childId, logsQuarks);
}
}
@@ -272,7 +280,7 @@ public class SpanLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNull
return;
}
long childId = getId(ustSpan);
- builder.add(new SpanLifeEntryModel(childId, parentId, getSpanName(childName), ss.getStartTime(), ss.getCurrentEndTime(), logs, getErrorTag(childName), getProcessName(childName)));
+ builder.add(new SpanLifeEntryModel(childId, parentId, Collections.singletonList(getSpanName(childName)), ss.getStartTime(), ss.getCurrentEndTime(), logs, getErrorTag(childName), getProcessName(childName)));
addUstChildren(ss, builder, child, ustQuark, childId, logsQuarks);
}
}
@@ -327,4 +335,18 @@ public class SpanLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNull
return OTHER;
}
}
+
+ @Deprecated
+ @Override
+ public TmfModelResponse<List<ITimeGraphArrow>> fetchArrows(TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
+ }
+
+ @Deprecated
+ @Override
+ public TmfModelResponse<Map<String, String>> fetchTooltip(SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.opentracing.core/src/org/eclipse/tracecompass/incubator/internal/opentracing/core/analysis/spanlife/SpanLifeEntryModel.java b/tracetypes/org.eclipse.tracecompass.incubator.opentracing.core/src/org/eclipse/tracecompass/incubator/internal/opentracing/core/analysis/spanlife/SpanLifeEntryModel.java
index 3e901715c..b16b9d7a6 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.opentracing.core/src/org/eclipse/tracecompass/incubator/internal/opentracing/core/analysis/spanlife/SpanLifeEntryModel.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.opentracing.core/src/org/eclipse/tracecompass/incubator/internal/opentracing/core/analysis/spanlife/SpanLifeEntryModel.java
@@ -86,7 +86,7 @@ public class SpanLifeEntryModel extends TimeGraphEntryModel {
* @param processName
* process name
*/
- public SpanLifeEntryModel(long id, long parentId, String name, long startTime, long endTime, List<LogEvent> logs, boolean errorTag, String processName) {
+ public SpanLifeEntryModel(long id, long parentId, List<String> name, long startTime, long endTime, List<LogEvent> logs, boolean errorTag, String processName) {
super(id, parentId, name, startTime, endTime);
fLogs = logs;
fErrorTag = errorTag;
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.opentracing.ui/src/org/eclipse/tracecompass/incubator/internal/opentracing/ui/view/spanlife/SpanLifePresentationProvider.java b/tracetypes/org.eclipse.tracecompass.incubator.opentracing.ui/src/org/eclipse/tracecompass/incubator/internal/opentracing/ui/view/spanlife/SpanLifePresentationProvider.java
index a0ea65949..a26a917aa 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.opentracing.ui/src/org/eclipse/tracecompass/incubator/internal/opentracing/ui/view/spanlife/SpanLifePresentationProvider.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.opentracing.ui/src/org/eclipse/tracecompass/incubator/internal/opentracing/ui/view/spanlife/SpanLifePresentationProvider.java
@@ -22,6 +22,7 @@ import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.RGBA;
import org.eclipse.tracecompass.incubator.internal.opentracing.core.analysis.spanlife.SpanLifeEntryModel;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphDataProvider;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
@@ -113,7 +114,7 @@ public class SpanLifePresentationProvider extends TimeGraphPresentationProvider
times.add(windowEndTime);
SelectionTimeQueryFilter filter = new SelectionTimeQueryFilter(times, Collections.singleton(id));
- TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> tooltipResponse = provider.fetchTooltip(filter, new NullProgressMonitor());
+ TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> tooltipResponse = provider.fetchTooltip(FetchParametersUtils.selectionTimeQueryToMap(filter), new NullProgressMonitor());
Map<@NonNull String, @NonNull String> tooltipModel = tooltipResponse.getModel();
if (tooltipModel != null) {
eventHoverToolTipInfo.putAll(tooltipModel);
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/connections/RosConnectionsDataProvider.java b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/connections/RosConnectionsDataProvider.java
index 002fc0797..02859f345 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/connections/RosConnectionsDataProvider.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/connections/RosConnectionsDataProvider.java
@@ -22,11 +22,12 @@ import org.apache.commons.lang3.StringUtils;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.tracecompass.internal.tmf.core.model.filters.TimeGraphStateQueryFilter;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.internal.tmf.core.model.timegraph.AbstractTimeGraphDataProvider;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.model.CommonStatusMessage;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
@@ -34,15 +35,16 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Multimap;
import com.google.common.collect.ImmutableList.Builder;
+import com.google.common.collect.Multimap;
import com.google.common.collect.TreeMultimap;
/**
@@ -72,13 +74,27 @@ public class RosConnectionsDataProvider extends AbstractTimeGraphDataProvider<@N
// fModule = analysisModule;
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
@@ -88,30 +104,34 @@ public class RosConnectionsDataProvider extends AbstractTimeGraphDataProvider<@N
}
@Override
- protected @Nullable List<@NonNull ITimeGraphRowModel> getRowModel(@NonNull ITmfStateSystem ss, @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @Nullable TimeGraphModel getRowModel(@NonNull ITmfStateSystem ss, Map<@NonNull String, @NonNull Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(),
Comparator.comparing(ITmfStateInterval::getStartTime));
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(parameters);
+ if (filter == null) {
+ return null;
+ }
Map<@NonNull Long, @NonNull Integer> entries = getSelectedEntries(filter);
Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime());
// Query
for (ITmfStateInterval interval : ss.query2D(entries.values(), times)) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
intervals.put(interval.getAttribute(), interval);
}
- Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull String>>> predicates = new HashMap<>();
- if (filter instanceof TimeGraphStateQueryFilter) {
- TimeGraphStateQueryFilter timeEventFilter = (TimeGraphStateQueryFilter) filter;
- predicates.putAll(computeRegexPredicate(timeEventFilter));
+ Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates = new HashMap<>();
+ Multimap<@NonNull Integer, @NonNull String> regexesMap = DataProviderParameterUtils.extractRegexFilter(parameters);
+ if (regexesMap != null) {
+ predicates.putAll(computeRegexPredicate(regexesMap));
}
List<@NonNull ITimeGraphRowModel> rows = new ArrayList<>();
for (Map.Entry<@NonNull Long, @NonNull Integer> entry : entries.entrySet()) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
List<ITimeGraphState> eventList = new ArrayList<>();
@@ -127,7 +147,7 @@ public class RosConnectionsDataProvider extends AbstractTimeGraphDataProvider<@N
}
rows.add(new TimeGraphRowModel(entry.getKey(), eventList));
}
- return rows;
+ return new TimeGraphModel(rows);
}
@Override
@@ -136,13 +156,12 @@ public class RosConnectionsDataProvider extends AbstractTimeGraphDataProvider<@N
}
@Override
- protected @NonNull List<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @NonNull TmfTreeModel<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, Map<String, Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
Builder<@NonNull TimeGraphEntryModel> builder = new Builder<>();
long parentId = getId(ITmfStateSystem.ROOT_ATTRIBUTE);
builder.add(new TimeGraphEntryModel(parentId, -1, String.valueOf(getTrace().getName()), ss.getStartTime(), ss.getCurrentEndTime()));
addChildren(ss, builder, ITmfStateSystem.ROOT_ATTRIBUTE, parentId);
- ImmutableList<@NonNull TimeGraphEntryModel> models = builder.build();
- return models;
+ return new TmfTreeModel<>(Collections.emptyList(), builder.build());
}
private void addChildren(ITmfStateSystem ss, Builder<@NonNull TimeGraphEntryModel> builder, int quark, long parentId) {
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/messageflow/RosMessageFlowDataProvider.java b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/messageflow/RosMessageFlowDataProvider.java
index bbb40de7c..c6aaaa4c1 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/messageflow/RosMessageFlowDataProvider.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/messageflow/RosMessageFlowDataProvider.java
@@ -11,6 +11,7 @@ package org.eclipse.tracecompass.incubator.internal.ros.core.analysis.messageflo
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -24,7 +25,8 @@ import org.eclipse.tracecompass.incubator.internal.ros.core.analysis.model.messa
import org.eclipse.tracecompass.incubator.internal.ros.core.analysis.model.messageflow.RosMessageFlowSegment;
import org.eclipse.tracecompass.incubator.internal.ros.core.analysis.model.messageflow.RosMessageFlowSegment.SegmentType;
import org.eclipse.tracecompass.internal.tmf.core.model.AbstractTmfTraceDataProvider;
-import org.eclipse.tracecompass.internal.tmf.core.model.filters.TimeGraphStateQueryFilter;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.model.CommonStatusMessage;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
@@ -34,8 +36,10 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse.Status;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
@@ -87,9 +91,25 @@ public class RosMessageFlowDataProvider extends AbstractTmfTraceDataProvider imp
return fSegmentToId.computeIfAbsent(segment, i -> ATOMIC_LONG.getAndIncrement());
}
+ @Deprecated
@Override
- public @NonNull TmfModelResponse<@NonNull List<@NonNull TimeGraphEntryModel>> fetchTree(
- @NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull TimeGraphEntryModel>> fetchTree(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ TmfModelResponse<@NonNull TmfTreeModel<@NonNull TimeGraphEntryModel>> response = fetchTree(FetchParametersUtils.timeQueryToMap(filter), monitor);
+ TmfTreeModel<@NonNull TimeGraphEntryModel> model = response.getModel();
+ List<@NonNull TimeGraphEntryModel> treeModel = null;
+ if (model != null) {
+ treeModel = model.getEntries();
+ }
+ return new TmfModelResponse<>(treeModel, response.getStatus(), response.getStatusMessage());
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull TmfTreeModel<@NonNull TimeGraphEntryModel>> fetchTree(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
+ TimeQueryFilter filter = FetchParametersUtils.createTimeQuery(fetchParameters);
+ if (filter == null) {
+ return new TmfModelResponse<>(null, Status.FAILED, CommonStatusMessage.INCORRECT_QUERY_PARAMETERS);
+ }
+
if (!fModel.isModelDone()) {
return new TmfModelResponse<>(null, Status.RUNNING, CommonStatusMessage.RUNNING);
}
@@ -99,7 +119,7 @@ public class RosMessageFlowDataProvider extends AbstractTmfTraceDataProvider imp
entries.add(new TimeGraphEntryModel(rootId, -1, String.valueOf(getTrace().getName()), filter.getStart(), filter.getEnd()));
RosMessageFlowSegment firstSegment = fModel.getFirstSegment();
addTreeChildren(entries, firstSegment, rootId);
- return new TmfModelResponse<>(entries, Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ return new TmfModelResponse<>(new TmfTreeModel<>(Collections.emptyList(), entries), Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
private void addTreeChildren(List<@NonNull TimeGraphEntryModel> entries, RosMessageFlowSegment segment, long parentId) {
@@ -114,29 +134,46 @@ public class RosMessageFlowDataProvider extends AbstractTmfTraceDataProvider imp
}
}
+ @Deprecated
+ @Override
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphRowModel>> fetchRowModel(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ @NonNull Map<@NonNull String, @NonNull Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ TmfModelResponse<@NonNull TimeGraphModel> response = fetchRowModel(parameters, monitor);
+ TimeGraphModel model = response.getModel();
+ List<@NonNull ITimeGraphRowModel> rows = null;
+ if (model != null) {
+ rows = model.getRows();
+ }
+ return new TmfModelResponse<>(rows, response.getStatus(), response.getStatusMessage());
+ }
+
@Override
- public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphRowModel>> fetchRowModel(
- @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ public @NonNull TmfModelResponse<@NonNull TimeGraphModel> fetchRowModel(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(fetchParameters);
+ if (filter == null) {
+ return new TmfModelResponse<>(null, Status.FAILED, CommonStatusMessage.INCORRECT_QUERY_PARAMETERS);
+ }
+
if (!fModel.isModelDone()) {
return new TmfModelResponse<>(null, Status.RUNNING, CommonStatusMessage.RUNNING);
}
- @NonNull Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull String>>> predicates = new HashMap<>();
- if (filter instanceof TimeGraphStateQueryFilter) {
- TimeGraphStateQueryFilter timeEventFilter = (TimeGraphStateQueryFilter) filter;
- predicates.putAll(computeRegexPredicate(timeEventFilter));
+ @NonNull Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates = new HashMap<>();
+ Multimap<@NonNull Integer, @NonNull String> regexesMap = DataProviderParameterUtils.extractRegexFilter(fetchParameters);
+ if (regexesMap != null) {
+ predicates.putAll(computeRegexPredicate(regexesMap));
}
List<@NonNull ITimeGraphRowModel> rows = new ArrayList<>();
RosMessageFlowSegment firstSegment = fModel.getFirstSegment();
addRowModels(rows, firstSegment, predicates, monitor);
- return new TmfModelResponse<>(rows, Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ return new TmfModelResponse<>(new TimeGraphModel(rows), Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
private void addRowModels(
List<@NonNull ITimeGraphRowModel> rows,
RosMessageFlowSegment segment,
- @NonNull Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull String>>> predicates,
+ @NonNull Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates,
@Nullable IProgressMonitor monitor) {
@NonNull List<@NonNull ITimeGraphState> eventList = new ArrayList<>();
@@ -171,8 +208,19 @@ public class RosMessageFlowDataProvider extends AbstractTmfTraceDataProvider imp
return 4;
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ return fetchArrows(FetchParametersUtils.timeQueryToMap(filter), monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
+ TimeQueryFilter filter = FetchParametersUtils.createTimeQuery(fetchParameters);
+ if (filter == null) {
+ return new TmfModelResponse<>(null, Status.FAILED, CommonStatusMessage.INCORRECT_QUERY_PARAMETERS);
+ }
+
if (!fModel.isModelDone()) {
return new TmfModelResponse<>(null, Status.RUNNING, CommonStatusMessage.RUNNING);
}
@@ -217,8 +265,14 @@ public class RosMessageFlowDataProvider extends AbstractTmfTraceDataProvider imp
return 7;
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ return fetchTooltip(FetchParametersUtils.selectionTimeQueryToMap(filter), monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
// TODO
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/nodes/RosNodesDataProvider.java b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/nodes/RosNodesDataProvider.java
index b7502765b..5c9e4d46c 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/nodes/RosNodesDataProvider.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/nodes/RosNodesDataProvider.java
@@ -22,11 +22,12 @@ import java.util.function.Predicate;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.tracecompass.internal.tmf.core.model.filters.TimeGraphStateQueryFilter;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.internal.tmf.core.model.timegraph.AbstractTimeGraphDataProvider;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.model.CommonStatusMessage;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
@@ -34,13 +35,14 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Multimap;
import com.google.common.collect.TreeMultimap;
@@ -68,13 +70,27 @@ public class RosNodesDataProvider extends AbstractTimeGraphDataProvider<@NonNull
super(trace, analysisModule);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
@@ -84,30 +100,34 @@ public class RosNodesDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
@Override
- protected @Nullable List<@NonNull ITimeGraphRowModel> getRowModel(@NonNull ITmfStateSystem ss, @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @Nullable TimeGraphModel getRowModel(@NonNull ITmfStateSystem ss, @NonNull Map<@NonNull String, @NonNull Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(),
Comparator.comparing(ITmfStateInterval::getStartTime));
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(parameters);
+ if (filter == null) {
+ return null;
+ }
Map<@NonNull Long, @NonNull Integer> entries = getSelectedEntries(filter);
Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime());
// Query
for (ITmfStateInterval interval : ss.query2D(entries.values(), times)) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
intervals.put(interval.getAttribute(), interval);
}
- Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull String>>> predicates = new HashMap<>();
- if (filter instanceof TimeGraphStateQueryFilter) {
- TimeGraphStateQueryFilter timeEventFilter = (TimeGraphStateQueryFilter) filter;
- predicates.putAll(computeRegexPredicate(timeEventFilter));
+ Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates = new HashMap<>();
+ Multimap<@NonNull Integer, @NonNull String> regexesMap = DataProviderParameterUtils.extractRegexFilter(parameters);
+ if (regexesMap != null) {
+ predicates.putAll(computeRegexPredicate(regexesMap));
}
List<@NonNull ITimeGraphRowModel> rows = new ArrayList<>();
for (Map.Entry<@NonNull Long, @NonNull Integer> entry : entries.entrySet()) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
List<ITimeGraphState> eventList = new ArrayList<>();
@@ -123,7 +143,7 @@ public class RosNodesDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
rows.add(new TimeGraphRowModel(entry.getKey(), eventList));
}
- return rows;
+ return new TimeGraphModel(rows);
}
@Override
@@ -132,13 +152,12 @@ public class RosNodesDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
@Override
- protected @NonNull List<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @NonNull TmfTreeModel<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull Map<@NonNull String, @NonNull Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
Builder<@NonNull TimeGraphEntryModel> builder = new Builder<>();
long parentId = getId(ITmfStateSystem.ROOT_ATTRIBUTE);
builder.add(new TimeGraphEntryModel(parentId, -1, String.valueOf(getTrace().getName()), ss.getStartTime(), ss.getCurrentEndTime()));
addChildren(ss, builder, ITmfStateSystem.ROOT_ATTRIBUTE, parentId);
- ImmutableList<@NonNull TimeGraphEntryModel> models = builder.build();
- return models;
+ return new TmfTreeModel<>(Collections.emptyList(), builder.build());
}
private void addChildren(ITmfStateSystem ss, Builder<@NonNull TimeGraphEntryModel> builder, int quark, long parentId) {
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/queues/RosQueuesDataProvider.java b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/queues/RosQueuesDataProvider.java
index 1b78870fc..170842497 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/queues/RosQueuesDataProvider.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/queues/RosQueuesDataProvider.java
@@ -23,11 +23,12 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.internal.ros.core.analysis.AbstractRosStateProvider;
import org.eclipse.tracecompass.incubator.internal.ros.core.analysis.ElementReferenceState;
-import org.eclipse.tracecompass.internal.tmf.core.model.filters.TimeGraphStateQueryFilter;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.internal.tmf.core.model.timegraph.AbstractTimeGraphDataProvider;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.model.CommonStatusMessage;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
@@ -35,13 +36,14 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Multimap;
import com.google.common.collect.TreeMultimap;
@@ -69,13 +71,27 @@ public class RosQueuesDataProvider extends AbstractTimeGraphDataProvider<@NonNul
super(trace, analysisModule);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
- return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
+ return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
@@ -85,30 +101,34 @@ public class RosQueuesDataProvider extends AbstractTimeGraphDataProvider<@NonNul
}
@Override
- protected @Nullable List<@NonNull ITimeGraphRowModel> getRowModel(@NonNull ITmfStateSystem ss, @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @Nullable TimeGraphModel getRowModel(@NonNull ITmfStateSystem ss, @NonNull Map<@NonNull String, @NonNull Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(),
Comparator.comparing(ITmfStateInterval::getStartTime));
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(parameters);
+ if (filter == null) {
+ return null;
+ }
Map<@NonNull Long, @NonNull Integer> entries = getSelectedEntries(filter);
Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime());
// Query
for (ITmfStateInterval interval : ss.query2D(entries.values(), times)) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
intervals.put(interval.getAttribute(), interval);
}
- Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull String>>> predicates = new HashMap<>();
- if (filter instanceof TimeGraphStateQueryFilter) {
- TimeGraphStateQueryFilter timeEventFilter = (TimeGraphStateQueryFilter) filter;
- predicates.putAll(computeRegexPredicate(timeEventFilter));
+ Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates = new HashMap<>();
+ Multimap<@NonNull Integer, @NonNull String> regexesMap = DataProviderParameterUtils.extractRegexFilter(parameters);
+ if (regexesMap != null) {
+ predicates.putAll(computeRegexPredicate(regexesMap));
}
List<@NonNull ITimeGraphRowModel> rows = new ArrayList<>();
for (Map.Entry<@NonNull Long, @NonNull Integer> entry : entries.entrySet()) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
List<ITimeGraphState> eventList = new ArrayList<>();
@@ -131,7 +151,7 @@ public class RosQueuesDataProvider extends AbstractTimeGraphDataProvider<@NonNul
rows.add(new TimeGraphRowModel(entry.getKey(), eventList));
}
- return rows;
+ return new TimeGraphModel(rows);
}
@Override
@@ -140,13 +160,12 @@ public class RosQueuesDataProvider extends AbstractTimeGraphDataProvider<@NonNul
}
@Override
- protected @NonNull List<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @NonNull TmfTreeModel<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull Map<@NonNull String, @NonNull Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
Builder<@NonNull TimeGraphEntryModel> builder = new Builder<>();
long parentId = getId(ITmfStateSystem.ROOT_ATTRIBUTE);
builder.add(new TimeGraphEntryModel(parentId, -1, String.valueOf(getTrace().getName()), ss.getStartTime(), ss.getCurrentEndTime()));
addChildren(ss, builder, ITmfStateSystem.ROOT_ATTRIBUTE, parentId);
- ImmutableList<@NonNull TimeGraphEntryModel> models = builder.build();
- return models;
+ return new TmfTreeModel<>(Collections.emptyList(), builder.build());
}
private void addChildren(ITmfStateSystem ss, Builder<@NonNull TimeGraphEntryModel> builder, int quark, long parentId) {
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/tasks/RosTasksDataProvider.java b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/tasks/RosTasksDataProvider.java
index b57d3896d..a171b0acf 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/tasks/RosTasksDataProvider.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/tasks/RosTasksDataProvider.java
@@ -21,11 +21,12 @@ import java.util.function.Predicate;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.tracecompass.internal.tmf.core.model.filters.TimeGraphStateQueryFilter;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.internal.tmf.core.model.timegraph.AbstractTimeGraphDataProvider;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.model.CommonStatusMessage;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
@@ -33,13 +34,14 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Multimap;
import com.google.common.collect.TreeMultimap;
@@ -67,13 +69,27 @@ public class RosTasksDataProvider extends AbstractTimeGraphDataProvider<@NonNull
super(trace, analysisModule);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
- return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
+ return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
@@ -83,30 +99,34 @@ public class RosTasksDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
@Override
- protected @Nullable List<@NonNull ITimeGraphRowModel> getRowModel(@NonNull ITmfStateSystem ss, @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @Nullable TimeGraphModel getRowModel(@NonNull ITmfStateSystem ss, @NonNull Map<@NonNull String, @NonNull Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(),
Comparator.comparing(ITmfStateInterval::getStartTime));
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(parameters);
+ if (filter == null) {
+ return null;
+ }
Map<@NonNull Long, @NonNull Integer> entries = getSelectedEntries(filter);
Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime());
// Query
for (ITmfStateInterval interval : ss.query2D(entries.values(), times)) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
intervals.put(interval.getAttribute(), interval);
}
- Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull String>>> predicates = new HashMap<>();
- if (filter instanceof TimeGraphStateQueryFilter) {
- TimeGraphStateQueryFilter timeEventFilter = (TimeGraphStateQueryFilter) filter;
- predicates.putAll(computeRegexPredicate(timeEventFilter));
+ Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates = new HashMap<>();
+ Multimap<@NonNull Integer, @NonNull String> regexesMap = DataProviderParameterUtils.extractRegexFilter(parameters);
+ if (regexesMap != null) {
+ predicates.putAll(computeRegexPredicate(regexesMap));
}
List<@NonNull ITimeGraphRowModel> rows = new ArrayList<>();
for (Map.Entry<@NonNull Long, @NonNull Integer> entry : entries.entrySet()) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
List<ITimeGraphState> eventList = new ArrayList<>();
@@ -123,7 +143,7 @@ public class RosTasksDataProvider extends AbstractTimeGraphDataProvider<@NonNull
rows.add(new TimeGraphRowModel(entry.getKey(), eventList));
}
- return rows;
+ return new TimeGraphModel(rows);
}
@Override
@@ -132,13 +152,12 @@ public class RosTasksDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
@Override
- protected @NonNull List<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @NonNull TmfTreeModel<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull Map<@NonNull String, @NonNull Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
Builder<@NonNull TimeGraphEntryModel> builder = new Builder<>();
long parentId = getId(ITmfStateSystem.ROOT_ATTRIBUTE);
builder.add(new TimeGraphEntryModel(parentId, -1, String.valueOf(getTrace().getName()), ss.getStartTime(), ss.getCurrentEndTime()));
addChildren(ss, builder, ITmfStateSystem.ROOT_ATTRIBUTE, parentId);
- ImmutableList<@NonNull TimeGraphEntryModel> models = builder.build();
- return models;
+ return new TmfTreeModel<>(Collections.emptyList(), builder.build());
}
private void addChildren(ITmfStateSystem ss, Builder<@NonNull TimeGraphEntryModel> builder, int quark, long parentId) {
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/timers/RosTimersDataProvider.java b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/timers/RosTimersDataProvider.java
index ca57108fb..3ec78e068 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/timers/RosTimersDataProvider.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.ros.core/src/org/eclipse/tracecompass/incubator/internal/ros/core/analysis/timers/RosTimersDataProvider.java
@@ -23,11 +23,12 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.internal.ros.core.analysis.ElementReferenceState;
import org.eclipse.tracecompass.incubator.internal.ros.core.analysis.PeriodState;
-import org.eclipse.tracecompass.internal.tmf.core.model.filters.TimeGraphStateQueryFilter;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.internal.tmf.core.model.timegraph.AbstractTimeGraphDataProvider;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
+import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.model.CommonStatusMessage;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
@@ -35,13 +36,14 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Multimap;
import com.google.common.collect.TreeMultimap;
@@ -69,13 +71,27 @@ public class RosTimersDataProvider extends AbstractTimeGraphDataProvider<@NonNul
super(trace, analysisModule);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
- return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
+ return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull Map<@NonNull String, @NonNull Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
@@ -85,30 +101,34 @@ public class RosTimersDataProvider extends AbstractTimeGraphDataProvider<@NonNul
}
@Override
- protected @Nullable List<@NonNull ITimeGraphRowModel> getRowModel(@NonNull ITmfStateSystem ss, @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @Nullable TimeGraphModel getRowModel(@NonNull ITmfStateSystem ss, @NonNull Map<@NonNull String, @NonNull Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(),
Comparator.comparing(ITmfStateInterval::getStartTime));
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(parameters);
+ if (filter == null) {
+ return null;
+ }
Map<@NonNull Long, @NonNull Integer> entries = getSelectedEntries(filter);
Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime());
// Query
for (ITmfStateInterval interval : ss.query2D(entries.values(), times)) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
intervals.put(interval.getAttribute(), interval);
}
- Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull String>>> predicates = new HashMap<>();
- if (filter instanceof TimeGraphStateQueryFilter) {
- TimeGraphStateQueryFilter timeEventFilter = (TimeGraphStateQueryFilter) filter;
- predicates.putAll(computeRegexPredicate(timeEventFilter));
+ Map<@NonNull Integer, @NonNull Predicate<@NonNull Multimap<@NonNull String, @NonNull Object>>> predicates = new HashMap<>();
+ Multimap<@NonNull Integer, @NonNull String> regexesMap = DataProviderParameterUtils.extractRegexFilter(parameters);
+ if (regexesMap != null) {
+ predicates.putAll(computeRegexPredicate(regexesMap));
}
List<@NonNull ITimeGraphRowModel> rows = new ArrayList<>();
for (Map.Entry<@NonNull Long, @NonNull Integer> entry : entries.entrySet()) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
List<ITimeGraphState> eventList = new ArrayList<>();
@@ -139,7 +159,7 @@ public class RosTimersDataProvider extends AbstractTimeGraphDataProvider<@NonNul
rows.add(new TimeGraphRowModel(entry.getKey(), eventList));
}
- return rows;
+ return new TimeGraphModel(rows);
}
@Override
@@ -148,13 +168,12 @@ public class RosTimersDataProvider extends AbstractTimeGraphDataProvider<@NonNul
}
@Override
- protected @NonNull List<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @NonNull TmfTreeModel<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull Map<@NonNull String, @NonNull Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
Builder<@NonNull TimeGraphEntryModel> builder = new Builder<>();
long parentId = getId(ITmfStateSystem.ROOT_ATTRIBUTE);
builder.add(new TimeGraphEntryModel(parentId, -1, String.valueOf(getTrace().getName()), ss.getStartTime(), ss.getCurrentEndTime()));
addChildren(ss, builder, ITmfStateSystem.ROOT_ATTRIBUTE, parentId);
- ImmutableList<@NonNull TimeGraphEntryModel> models = builder.build();
- return models;
+ return new TmfTreeModel<>(Collections.emptyList(), builder.build());
}
private void addChildren(ITmfStateSystem ss, Builder<@NonNull TimeGraphEntryModel> builder, int quark, long parentId) {
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/ContextTest.java b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/ContextTest.java
index a68bb0097..74566888c 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/ContextTest.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/ContextTest.java
@@ -22,15 +22,17 @@ import org.eclipse.tracecompass.incubator.internal.traceevent.core.analysis.cont
import org.eclipse.tracecompass.incubator.internal.traceevent.core.analysis.context.ContextDataProvider;
import org.eclipse.tracecompass.incubator.internal.traceevent.core.analysis.context.ContextDataProviderFactory;
import org.eclipse.tracecompass.incubator.internal.traceevent.core.trace.TraceEventTrace;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
-import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
@@ -80,25 +82,25 @@ public class ContextTest {
*/
assertNotNull(provider);
TimeQueryFilter filter = new TimeQueryFilter(trace.getStartTime().toNanos(), trace.getEndTime().toNanos(), 1000);
- TmfModelResponse<@NonNull List<@NonNull TimeGraphEntryModel>> tree = provider.fetchTree(filter, new NullProgressMonitor());
+ TmfModelResponse<@NonNull TmfTreeModel<@NonNull TimeGraphEntryModel>> tree = provider.fetchTree(FetchParametersUtils.timeQueryToMap(filter), new NullProgressMonitor());
assertEquals(tree.getStatus(), TmfModelResponse.Status.COMPLETED);
- List<@NonNull TimeGraphEntryModel> model = tree.getModel();
+ TmfTreeModel<@NonNull TimeGraphEntryModel> model = tree.getModel();
/*
* Does the query have the right data?
*/
assertNotNull(model);
- TimeGraphEntryModel rootEntry = model.get(0);
+ TimeGraphEntryModel rootEntry = model.getEntries().get(0);
assertEquals("blink", rootEntry.getName());
SelectionTimeQueryFilter selectionFilter = new SelectionTimeQueryFilter(trace.getStartTime().toNanos(), trace.getEndTime().toNanos(), 1000, Collections.singleton(rootEntry.getId()));
- TmfModelResponse<@NonNull List<@NonNull ITimeGraphRowModel>> rowModel = provider.fetchRowModel(selectionFilter, new NullProgressMonitor());
+ TmfModelResponse<@NonNull TimeGraphModel> rowModel = provider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(selectionFilter), new NullProgressMonitor());
/*
* Does the second query have the bookmarks?
*/
assertNotNull(rowModel);
- List<@NonNull ITimeGraphRowModel> markerList = rowModel.getModel();
+ TimeGraphModel markerList = rowModel.getModel();
assertNotNull(markerList);
- assertFalse(markerList.isEmpty());
- List<@NonNull ITimeGraphState> bookmarks = markerList.get(0).getStates();
+ assertFalse(markerList.getRows().isEmpty());
+ List<@NonNull ITimeGraphState> bookmarks = markerList.getRows().get(0).getStates();
assertEquals(3, bookmarks.size());
assertEquals(Collections.singleton("FrameBlameContext"), Sets.newHashSet(Lists.transform(bookmarks, bookmark -> bookmark.getLabel())));
} finally {
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/ObjectLifeAnalysisTest.java b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/ObjectLifeAnalysisTest.java
index b0be4a97f..ba283fd70 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/ObjectLifeAnalysisTest.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core.tests/src/org/eclipse/tracecompass/incubator/traceevent/core/tests/ObjectLifeAnalysisTest.java
@@ -21,12 +21,15 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.incubator.internal.traceevent.core.analysis.objectlife.ObjectLifeAnalysis;
import org.eclipse.tracecompass.incubator.internal.traceevent.core.analysis.objectlife.ObjectLifeDataProvider;
import org.eclipse.tracecompass.incubator.internal.traceevent.core.trace.TraceEventTrace;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse.Status;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
@@ -102,15 +105,15 @@ public class ObjectLifeAnalysisTest {
@Test
@SuppressWarnings("restriction")
public void test() {
- TmfModelResponse<@NonNull List<@NonNull TimeGraphEntryModel>> tree = fDataProvider.fetchTree(new TimeQueryFilter(fStart, fEnd, 1000), new NullProgressMonitor());
+ TmfModelResponse<@NonNull TmfTreeModel<@NonNull TimeGraphEntryModel>> tree = fDataProvider.fetchTree(FetchParametersUtils.timeQueryToMap(new TimeQueryFilter(fStart, fEnd, 1000)), new NullProgressMonitor());
assertEquals(Status.COMPLETED, tree.getStatus());
- List<@NonNull TimeGraphEntryModel> treeModel = tree.getModel();
+ TmfTreeModel<@NonNull TimeGraphEntryModel> treeModel = tree.getModel();
assertNotNull(treeModel);
- TimeGraphEntryModel mufasaEntry = getValueEntry(treeModel, "Mufasa");
- TimeGraphEntryModel sarabiEntry = getValueEntry(treeModel, "Sarabi");
- TimeGraphEntryModel scarEntry = getValueEntry(treeModel, "Scar");
- TimeGraphEntryModel simbaEntry = getValueEntry(treeModel, "Simba");
+ TimeGraphEntryModel mufasaEntry = getValueEntry(treeModel.getEntries(), "Mufasa");
+ TimeGraphEntryModel sarabiEntry = getValueEntry(treeModel.getEntries(), "Sarabi");
+ TimeGraphEntryModel scarEntry = getValueEntry(treeModel.getEntries(), "Scar");
+ TimeGraphEntryModel simbaEntry = getValueEntry(treeModel.getEntries(), "Simba");
assertNotNull(mufasaEntry);
assertNotNull(sarabiEntry);
assertNotNull(scarEntry);
@@ -120,25 +123,26 @@ public class ObjectLifeAnalysisTest {
* Remember, state system is in nanos, time range is known since we know the
* trace
*/
- TmfModelResponse<@NonNull List<@NonNull ITimeGraphRowModel>> resp = fDataProvider.fetchRowModel(new SelectionTimeQueryFilter(100000L, 300000L, 200, items), new NullProgressMonitor());
+ TmfModelResponse<@NonNull TimeGraphModel> resp = fDataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(100000L, 300000L, 200, items)), new NullProgressMonitor());
assertEquals(Status.COMPLETED, resp.getStatus());
- List<@NonNull ITimeGraphRowModel> models = resp.getModel();
- assertNotNull(models);
- ImmutableMap<Long, @NonNull ITimeGraphRowModel> groupRowsById = Maps.uniqueIndex(models, ITimeGraphRowModel::getEntryID);
+ TimeGraphModel model = resp.getModel();
+ assertNotNull(model);
+ List<@NonNull ITimeGraphRowModel> modelRows = model.getRows();
+ ImmutableMap<Long, @NonNull ITimeGraphRowModel> groupRowsById = Maps.uniqueIndex(modelRows, ITimeGraphRowModel::getEntryID);
ITimeGraphRowModel mufasaRow = groupRowsById.get(mufasaEntry.getId());
assertNotNull(mufasaRow);
assertEquals("", mufasaRow.getStates().get(0).getLabel());
assertEquals(null, mufasaRow.getStates().get(1).getLabel());
- ITimeGraphRowModel sarabiRow = models.get(1);
+ ITimeGraphRowModel sarabiRow = modelRows.get(1);
assertNotNull(sarabiRow);
assertEquals(null, sarabiRow.getStates().get(0).getLabel());
assertEquals("", sarabiRow.getStates().get(1).getLabel());
assertEquals(null, sarabiRow.getStates().get(2).getLabel());
- ITimeGraphRowModel scarRow = models.get(2);
+ ITimeGraphRowModel scarRow = modelRows.get(2);
assertNotNull(scarRow); // The bad guy
assertEquals(null, scarRow.getStates().get(0).getLabel());
assertEquals("", scarRow.getStates().get(1).getLabel());
- ITimeGraphRowModel simbaRow = models.get(3);
+ ITimeGraphRowModel simbaRow = modelRows.get(3);
assertNotNull(simbaRow);
assertEquals(null, simbaRow.getStates().get(0).getLabel());
assertEquals("", simbaRow.getStates().get(1).getLabel());
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/analysis/context/ContextDataProvider.java b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/analysis/context/ContextDataProvider.java
index d961fa22d..0abc21782 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/analysis/context/ContextDataProvider.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/analysis/context/ContextDataProvider.java
@@ -21,6 +21,7 @@ import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.internal.tmf.core.model.timegraph.AbstractTimeGraphDataProvider;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
@@ -28,11 +29,12 @@ import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
-import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse.Status;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
@@ -119,24 +121,39 @@ public class ContextDataProvider extends AbstractTimeGraphDataProvider<@NonNull
return true;
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, Status.COMPLETED, "Not supported"); //$NON-NLS-1$
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, Status.COMPLETED, "Not supported"); //$NON-NLS-1$
}
@Override
- protected @Nullable List<@NonNull ITimeGraphRowModel> getRowModel(@NonNull ITmfStateSystem ss, @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @Nullable TimeGraphModel getRowModel(@NonNull ITmfStateSystem ss, Map<String, Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
/*
* Order is not important here
*/
Map<Integer, String[]> paths = new HashMap<>();
List<ITimeGraphState> markerList = new ArrayList<>();
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(parameters);
Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime());
Set<Integer> quarks = new HashSet<>();
Map<@NonNull Long, @NonNull Integer> selectedEntries = getSelectedEntries(filter);
@@ -150,7 +167,7 @@ public class ContextDataProvider extends AbstractTimeGraphDataProvider<@NonNull
/* Do the actual query */
for (ITmfStateInterval interval : ss.query2D(quarks, times)) {
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
if (interval.getValue() instanceof Integer) {
long startTime = interval.getStartTime();
@@ -161,21 +178,21 @@ public class ContextDataProvider extends AbstractTimeGraphDataProvider<@NonNull
}
if (monitor != null && monitor.isCanceled()) {
- return Collections.emptyList();
+ return new TimeGraphModel(Collections.emptyList());
}
- return Collections.singletonList(new TimeGraphRowModel(getId(ITmfStateSystem.ROOT_ATTRIBUTE), markerList));
+ return new TimeGraphModel(Collections.singletonList(new TimeGraphRowModel(getId(ITmfStateSystem.ROOT_ATTRIBUTE), markerList)));
}
@Override
- protected @NonNull List<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected TmfTreeModel<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, Map<String, Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
long rootId = getId(ITmfStateSystem.ROOT_ATTRIBUTE);
List<@NonNull Integer> attribs = ss.getSubAttributes(ITmfStateSystem.ROOT_ATTRIBUTE, false);
List<@NonNull TimeGraphEntryModel> retVal = new ArrayList<>();
for (Integer attrib : attribs) {
String[] strings = ss.getFullAttributePathArray(attrib);
- retVal.add(new TimeGraphEntryModel(getId(attrib), rootId, strings[0], ss.getStartTime(), ss.getCurrentEndTime()));
+ retVal.add(new TimeGraphEntryModel(getId(attrib), rootId, Collections.singletonList(strings[0]), ss.getStartTime(), ss.getCurrentEndTime()));
}
- return retVal;
+ return new TmfTreeModel<>(Collections.emptyList(), retVal);
}
}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/analysis/objectlife/ObjectLifeDataProvider.java b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/analysis/objectlife/ObjectLifeDataProvider.java
index e46ee2ab4..cd0a07e81 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/analysis/objectlife/ObjectLifeDataProvider.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.core/src/org/eclipse/tracecompass/incubator/internal/traceevent/core/analysis/objectlife/ObjectLifeDataProvider.java
@@ -19,6 +19,7 @@ import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.internal.tmf.core.model.timegraph.AbstractTimeGraphDataProvider;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
@@ -30,8 +31,10 @@ import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphArrow;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphState;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
@@ -64,14 +67,32 @@ public class ObjectLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNu
super(trace, analysisModule);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(@NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.timeQueryToMap(filter);
+ return fetchArrows(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull List<@NonNull ITimeGraphArrow>> fetchArrows(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
return new TmfModelResponse<>(null, ITmfResponse.Status.COMPLETED, CommonStatusMessage.COMPLETED);
}
+ @Deprecated
@Override
public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(@NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) {
+ Map<String, Object> parameters = FetchParametersUtils.selectionTimeQueryToMap(filter);
+ return fetchTooltip(parameters, monitor);
+ }
+
+ @Override
+ public @NonNull TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> fetchTooltip(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
ITmfStateSystem ss = getAnalysisModule().getStateSystem();
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(fetchParameters);
+ if (filter == null) {
+ return new TmfModelResponse<>(null, ITmfResponse.Status.FAILED, CommonStatusMessage.INCORRECT_QUERY_PARAMETERS);
+ }
Map<@NonNull Long, @NonNull Integer> entries = getSelectedEntries(filter);
Collection<@NonNull Integer> quarks = entries.values();
long start = filter.getStart();
@@ -105,9 +126,10 @@ public class ObjectLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNu
}
@Override
- protected @Nullable List<@NonNull ITimeGraphRowModel> getRowModel(@NonNull ITmfStateSystem ss, @NonNull SelectionTimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @Nullable TimeGraphModel getRowModel(@NonNull ITmfStateSystem ss, Map<String, Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
TreeMultimap<Integer, ITmfStateInterval> intervals = TreeMultimap.create(Comparator.naturalOrder(),
Comparator.comparing(ITmfStateInterval::getStartTime));
+ SelectionTimeQueryFilter filter = FetchParametersUtils.createSelectionTimeQuery(parameters);
Map<@NonNull Long, @NonNull Integer> entries = getSelectedEntries(filter);
Collection<Long> times = getTimes(filter, ss.getStartTime(), ss.getCurrentEndTime());
/* Do the actual query */
@@ -134,7 +156,7 @@ public class ObjectLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNu
rows.add(new TimeGraphRowModel(entry.getKey(), eventList));
}
- return rows;
+ return new TimeGraphModel(rows);
}
@Override
@@ -144,18 +166,18 @@ public class ObjectLifeDataProvider extends AbstractTimeGraphDataProvider<@NonNu
@SuppressWarnings("restriction")
@Override
- protected @NonNull List<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, @NonNull TimeQueryFilter filter, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
+ protected @NonNull TmfTreeModel<@NonNull TimeGraphEntryModel> getTree(@NonNull ITmfStateSystem ss, Map<String, Object> parameters, @Nullable IProgressMonitor monitor) throws StateSystemDisposedException {
Builder<@NonNull TimeGraphEntryModel> builder = new Builder<>();
long parentId = getId(ITmfStateSystem.ROOT_ATTRIBUTE);
- builder.add(new TimeGraphEntryModel(parentId, -1, getTrace().getName(), ss.getStartTime(), ss.getCurrentEndTime()));
+ builder.add(new TimeGraphEntryModel(parentId, -1, Collections.singletonList(getTrace().getName()), ss.getStartTime(), ss.getCurrentEndTime()));
addChildren(ss, builder, ITmfStateSystem.ROOT_ATTRIBUTE, parentId);
- return builder.build();
+ return new TmfTreeModel<>(Collections.emptyList(), builder.build());
}
private void addChildren(ITmfStateSystem ss, Builder<@NonNull TimeGraphEntryModel> builder, int quark, long parentId) {
for (Integer child : ss.getSubAttributes(quark, false)) {
long childId = getId(child);
- builder.add(new TimeGraphEntryModel(childId, parentId, ss.getAttributeName(child), ss.getStartTime(), ss.getCurrentEndTime()));
+ builder.add(new TimeGraphEntryModel(childId, parentId, Collections.singletonList(ss.getAttributeName(child)), ss.getStartTime(), ss.getCurrentEndTime()));
addChildren(ss, builder, child, childId);
}
}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.ui/src/org/eclipse/tracecompass/incubator/internal/traceevent/ui/markers/ContextMarkers.java b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.ui/src/org/eclipse/tracecompass/incubator/internal/traceevent/ui/markers/ContextMarkers.java
index e3f7938e0..e7cd5b911 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.traceevent.ui/src/org/eclipse/tracecompass/incubator/internal/traceevent/ui/markers/ContextMarkers.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.traceevent.ui/src/org/eclipse/tracecompass/incubator/internal/traceevent/ui/markers/ContextMarkers.java
@@ -21,13 +21,16 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.swt.graphics.RGBA;
import org.eclipse.tracecompass.incubator.internal.traceevent.core.analysis.context.ContextDataProvider;
import org.eclipse.tracecompass.incubator.internal.traceevent.core.analysis.context.ContextDataProvider.MarkerModel;
+import org.eclipse.tracecompass.internal.tmf.core.model.filters.FetchParametersUtils;
import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderManager;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphRowModel;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphState;
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
+import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphModel;
import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeDataModel;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
@@ -68,14 +71,14 @@ public class ContextMarkers implements IMarkerEventSource {
if (dataProvider == null) {
return Collections.emptyList();
}
- TmfModelResponse<@NonNull List<@NonNull TimeGraphEntryModel>> tree = dataProvider.fetchTree(new TimeQueryFilter(Collections.emptyList()), new NullProgressMonitor());
- List<@NonNull TimeGraphEntryModel> model = tree.getModel();
+ TmfModelResponse<@NonNull TmfTreeModel<@NonNull TimeGraphEntryModel>> tree = dataProvider.fetchTree(FetchParametersUtils.timeQueryToMap(new TimeQueryFilter(Collections.emptyList())), new NullProgressMonitor());
+ TmfTreeModel<@NonNull TimeGraphEntryModel> model = tree.getModel();
if (model == null) {
return Collections.emptyList();
}
Set<String> data = new HashSet<>();
- for (TmfTreeDataModel elem : model) {
+ for (TmfTreeDataModel elem : model.getEntries()) {
data.add(elem.getName());
}
List<String> dataList = Lists.newArrayList(data);
@@ -93,25 +96,25 @@ public class ContextMarkers implements IMarkerEventSource {
if (dataProvider == null) {
return Collections.emptyList();
}
- TmfModelResponse<@NonNull List<@NonNull TimeGraphEntryModel>> tree = dataProvider.fetchTree(new TimeQueryFilter(Collections.emptyList()), monitor);
- List<@NonNull TimeGraphEntryModel> treeModels = tree.getModel();
+ TmfModelResponse<@NonNull TmfTreeModel<@NonNull TimeGraphEntryModel>> tree = dataProvider.fetchTree(FetchParametersUtils.timeQueryToMap(new TimeQueryFilter(Collections.emptyList())), monitor);
+ TmfTreeModel<@NonNull TimeGraphEntryModel> treeModels = tree.getModel();
if (treeModels == null) {
return Collections.emptyList();
}
List<Long> ids = new ArrayList<>();
- for (TmfTreeDataModel treeModel : treeModels) {
+ for (TmfTreeDataModel treeModel : treeModels.getEntries()) {
if (treeModel.getName().startsWith(category)) {
ids.add(treeModel.getId());
}
}
- TmfModelResponse<@NonNull List<@NonNull ITimeGraphRowModel>> res = dataProvider.fetchRowModel(new SelectionTimeQueryFilter(startTime, endTime, (int) Math.max(2, (((double) endTime - startTime) / resolution)), ids), monitor);
- List<@NonNull ITimeGraphRowModel> rowModels = res.getModel();
- if (rowModels == null || rowModels.isEmpty()) {
+ TmfModelResponse<@NonNull TimeGraphModel> res = dataProvider.fetchRowModel(FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(startTime, endTime, (int) Math.max(2, (((double) endTime - startTime) / resolution)), ids)), monitor);
+ TimeGraphModel rowModels = res.getModel();
+ if (rowModels == null || rowModels.getRows().isEmpty()) {
return Collections.emptyList();
}
List<IMarkerEvent> events = new ArrayList<>();
- for (ITimeGraphRowModel rowModel : rowModels) {
+ for (ITimeGraphRowModel rowModel : rowModels.getRows()) {
for (ITimeGraphState model : rowModel.getStates()) {
if (model instanceof MarkerModel) {
events.add(new MarkerEvent(null, model.getStartTime(), model.getDuration(), ((MarkerModel) model).getCategory(), ONE_TRUE_COLOUR, model.getLabel(), true));

Back to the top