Scripting: support histogram chart
Change-Id: I3abe736fd48fbfa2ee159e2c059c3c95bce37b11
Signed-off-by: Qing Chi <chiqing2010@163.com>
Reviewed-on: https://git.eclipse.org/r/160134
Tested-by: Trace Compass Bot <tracecompass-bot@eclipse.org>
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Tested-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Tested-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
diff --git a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/META-INF/MANIFEST.MF b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/META-INF/MANIFEST.MF
index 9d058bf..875b0da 100644
--- a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/META-INF/MANIFEST.MF
+++ b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/META-INF/MANIFEST.MF
@@ -29,6 +29,7 @@
org.eclipse.tracecompass.incubator.callstack.ui;resolution:=optional
Export-Package: org.eclipse.tracecompass.incubator.internal.scripting.ui;x-friends:="org.eclipse.tracecompass.incubator.scripting.ui.tests",
org.eclipse.tracecompass.incubator.internal.scripting.ui.project.handlers;x-internal:=true,
+ org.eclipse.tracecompass.incubator.internal.scripting.ui.views.histogram;x-internal:=true,
org.eclipse.tracecompass.incubator.internal.scripting.ui.views.timegraph;x-internal:=true,
org.eclipse.tracecompass.incubator.internal.scripting.ui.views.xychart;x-internal:=true,
org.eclipse.tracecompass.incubator.scripting.ui.callstack,
diff --git a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/plugin.properties b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/plugin.properties
index c9702df..41ff170 100644
--- a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/plugin.properties
+++ b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/plugin.properties
@@ -12,6 +12,7 @@
Bundle-Vendor = Eclipse Trace Compass Incubator
Bundle-Name = Trace Compass Scripting UI Plug-in (Incubator)
+view.scriptedHistogramChart = Scripted Histogram Chart
view.scriptedTimeGraph = Scripted Time Graph
view.scriptedXYChart = Scripted XY Chart
diff --git a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/plugin.xml b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/plugin.xml
index 419d1a7..358d8ea 100644
--- a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/plugin.xml
+++ b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/plugin.xml
@@ -30,6 +30,17 @@
<view
allowMultiple="true"
category="org.eclipse.linuxtools.lttng2.ui.views.category"
+ class="org.eclipse.tracecompass.incubator.internal.scripting.ui.views.histogram.ScriptedHistogramView"
+ id="org.eclipse.tracecompass.incubator.internal.scripting.ui.views.histogram"
+ name="%view.scriptedHistogramChart"
+ restorable="true">
+ </view>
+ </extension>
+ <extension
+ point="org.eclipse.ui.views">
+ <view
+ allowMultiple="true"
+ category="org.eclipse.linuxtools.lttng2.ui.views.category"
class="org.eclipse.tracecompass.incubator.internal.scripting.ui.views.timegraph.ScriptedTimeGraphView"
id="org.eclipse.tracecompass.incubator.scripting.ui.view.timegraph"
name="%view.scriptedTimeGraph"
diff --git a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/Messages.java b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/Messages.java
new file mode 100644
index 0000000..e090783
--- /dev/null
+++ b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/Messages.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2020 VMware
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.scripting.ui.views.histogram;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Messages related to the {@link ScriptedHistogramView}
+ *
+ * @author Qing Chi
+ */
+public class Messages extends NLS {
+
+ private static final String BUNDLE_NAME = "org.eclipse.tracecompass.incubator.internal.scripting.ui.views.histogram.messages"; //$NON-NLS-1$
+
+ /** Default Viewer title */
+ public static String ScriptedHistogramTreeViewer_DefaultViewerTitle;
+ /** default x axis title */
+ public static String ScriptedHistogramTreeViewer_DefaultXAxis;
+ /** default y axis title */
+ public static String ScriptedHistogramTreeViewer_DefaultYAxis;
+
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
diff --git a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/ScriptedHistogramView.java b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/ScriptedHistogramView.java
new file mode 100644
index 0000000..2a95b5d
--- /dev/null
+++ b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/ScriptedHistogramView.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2020 VMware
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.scripting.ui.views.histogram;
+
+import java.util.Objects;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.swt.widgets.Composite;
+
+import org.eclipse.tracecompass.incubator.internal.scripting.ui.views.xychart.ScriptedXYTreeViewer;
+import org.eclipse.tracecompass.tmf.ui.viewers.TmfViewer;
+import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.TmfXYChartViewer;
+import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfXYChartSettings;
+import org.eclipse.tracecompass.tmf.ui.views.TmfChartView;
+
+/**
+ * A data provider view to display the results of a scripted analysis. It uses
+ * the secondary ID as the data provider ID to display
+ *
+ * @author Qing Chi
+ */
+public class ScriptedHistogramView extends TmfChartView {
+
+ /**
+ * Because colons are not allowed in secondary IDs, but can be present in
+ * data provider IDs, they can be replaced upstream by this string and it
+ * will be replaced again when getting the data provider ID.
+ */
+ public static final String COLON = "[COLON]"; //$NON-NLS-1$
+
+ /** The view ID. */
+ public static final String ID = "org.eclipse.tracecompass.incubator.internal.scripting.ui.views.histogram"; //$NON-NLS-1$
+
+ /**
+ * Default Constructor
+ */
+ public ScriptedHistogramView() {
+ super(ID);
+ }
+
+ @Override
+ protected TmfXYChartViewer createChartViewer(Composite parent) {
+ TmfXYChartSettings settings = new TmfXYChartSettings(Messages.ScriptedHistogramTreeViewer_DefaultViewerTitle, Messages.ScriptedHistogramTreeViewer_DefaultXAxis, Messages.ScriptedHistogramTreeViewer_DefaultYAxis, 1);
+ return new ScriptedHistogramViewer(parent, settings, getSecondaryIdName());
+ }
+
+ @Override
+ protected @NonNull TmfViewer createLeftChildViewer(@Nullable Composite parent) {
+ return new ScriptedXYTreeViewer(Objects.requireNonNull(parent), getSecondaryIdName());
+ }
+
+ private String getSecondaryIdName() {
+ return getViewSite().getSecondaryId().replace(ScriptedHistogramView.COLON, ":"); //$NON-NLS-1$
+ }
+}
diff --git a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/ScriptedHistogramViewer.java b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/ScriptedHistogramViewer.java
new file mode 100644
index 0000000..31134f9
--- /dev/null
+++ b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/ScriptedHistogramViewer.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2020 VMware
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.scripting.ui.views.histogram;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tracecompass.tmf.core.presentation.IYAppearance;
+import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfFilteredXYChartViewer;
+import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfXYChartSettings;
+
+/**
+ * Viewer for the {@link ScriptedHistogramView}
+ *
+ * @author Qing Chi
+ */
+public class ScriptedHistogramViewer extends TmfFilteredXYChartViewer {
+
+ private static final int DEFAULT_SERIES_WIDTH = 1;
+
+ public ScriptedHistogramViewer(Composite parent, TmfXYChartSettings settings, String providerId) {
+ super(parent, settings, providerId);
+ }
+
+ @Override
+ public IYAppearance getSeriesAppearance(@NonNull String seriesName) {
+ return getPresentationProvider().getAppearance(seriesName, IYAppearance.Type.BAR, DEFAULT_SERIES_WIDTH);
+ }
+
+}
diff --git a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/messages.properties b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/messages.properties
new file mode 100644
index 0000000..301453b
--- /dev/null
+++ b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/internal/scripting/ui/views/histogram/messages.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2020 VMware
+#
+# All rights reserved. This program and the accompanying materials are
+# made available under the terms of the Eclipse Public License 2.0 which
+# accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0
+#
+# SPDX-License-Identifier: EPL-2.0
+###############################################################################
+
+ScriptedHistogramTreeViewer_DefaultViewerTitle=Scripted Histogram Viewer
+ScriptedHistogramTreeViewer_DefaultXAxis=Time
+ScriptedHistogramTreeViewer_DefaultYAxis=Unit
diff --git a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/scripting/ui/views/ViewModule.java b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/scripting/ui/views/ViewModule.java
index efda9f2..c507c21 100644
--- a/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/scripting/ui/views/ViewModule.java
+++ b/scripting/org.eclipse.tracecompass.incubator.scripting.ui/src/org/eclipse/tracecompass/incubator/scripting/ui/views/ViewModule.java
@@ -15,6 +15,7 @@
import org.eclipse.ease.modules.WrapToScript;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.tracecompass.incubator.internal.scripting.ui.views.histogram.ScriptedHistogramView;
import org.eclipse.tracecompass.incubator.internal.scripting.ui.views.timegraph.ScriptedTimeGraphView;
import org.eclipse.tracecompass.incubator.internal.scripting.ui.views.xychart.ScriptedXYView;
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphDataProvider;
@@ -149,4 +150,34 @@
return activePage.showView(ScriptedXYView.ID, name.replace(":", ScriptedXYView.COLON), IWorkbenchPage.VIEW_ACTIVATE); //$NON-NLS-1$
}
+
+ /**
+ * Open a histogram chart for a scripted XY data provider
+ *
+ * @param dataProvider
+ * The data provider used to populate the view
+ */
+ @WrapToScript
+ public void openHistogramChartView(ITmfTreeXYDataProvider<ITmfTreeDataModel> dataProvider) {
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ IViewPart view = openHistogramView(dataProvider.getId());
+ if (view == null) {
+ return;
+ }
+ } catch (final PartInitException e) {
+ // Do nothing
+ }
+ }
+ });
+ }
+
+ private static @Nullable IViewPart openHistogramView(String name) throws PartInitException {
+ final IWorkbench wb = PlatformUI.getWorkbench();
+ final IWorkbenchPage activePage = wb.getActiveWorkbenchWindow().getActivePage();
+
+ return activePage.showView(ScriptedHistogramView.ID, name.replace(":", ScriptedHistogramView.COLON), IWorkbenchPage.VIEW_ACTIVATE); //$NON-NLS-1$
+ }
}