diff options
Diffstat (limited to 'systemtap/org.eclipse.linuxtools.systemtap.graphingapi.ui/src/org/eclipse/linuxtools/systemtap/graphingapi/ui/charts/PieChartBuilder.java')
-rw-r--r-- | systemtap/org.eclipse.linuxtools.systemtap.graphingapi.ui/src/org/eclipse/linuxtools/systemtap/graphingapi/ui/charts/PieChartBuilder.java | 56 |
1 files changed, 46 insertions, 10 deletions
diff --git a/systemtap/org.eclipse.linuxtools.systemtap.graphingapi.ui/src/org/eclipse/linuxtools/systemtap/graphingapi/ui/charts/PieChartBuilder.java b/systemtap/org.eclipse.linuxtools.systemtap.graphingapi.ui/src/org/eclipse/linuxtools/systemtap/graphingapi/ui/charts/PieChartBuilder.java index c1e6223aac..c7a1389e60 100644 --- a/systemtap/org.eclipse.linuxtools.systemtap.graphingapi.ui/src/org/eclipse/linuxtools/systemtap/graphingapi/ui/charts/PieChartBuilder.java +++ b/systemtap/org.eclipse.linuxtools.systemtap.graphingapi.ui/src/org/eclipse/linuxtools/systemtap/graphingapi/ui/charts/PieChartBuilder.java @@ -22,13 +22,18 @@ import org.eclipse.swt.widgets.Composite; public class PieChartBuilder extends AbstractChartWithoutAxisBuilder { public static final String ID = "org.eclipse.linuxtools.systemtap.graphingapi.ui.charts.piechartbuilder"; //$NON-NLS-1$ - public PieChartBuilder(Composite parent, int style, String title,IAdapter adapter) { + public PieChartBuilder(Composite parent, int style, String title, IAdapter adapter) { super(adapter, parent, style, title); } @Override protected void createChart() { - this.chart = new PieChart(this, getStyle()); + String[] allNames = adapter.getLabels(); + String[] ySeriesNames = new String[allNames.length - 1]; + for (int i = 0; i < ySeriesNames.length; i++) { + ySeriesNames[i] = allNames[i+1]; + } + this.chart = new PieChart(this, getStyle(), ySeriesNames); } @Override @@ -37,23 +42,54 @@ public class PieChartBuilder extends AbstractChartWithoutAxisBuilder { if (data == null || data.length == 0 || data[0].length == 0) return; - int start = 0, len = Math.min(this.maxItems, data.length); + int start = 0, len = Math.min(this.maxItems, data.length), leny = data[0].length-1; if (this.maxItems < data.length) { start = data.length - this.maxItems; } - double[][] values = new double[len][data[0].length-1]; - String[] labels = new String[len]; + Double[][] all_values = new Double[len][leny]; + String[] all_labels = new String[len]; - for (int i = 0; i < labels.length; i++) { + for (int i = 0; i < all_labels.length; i++) { if (data[i].length < 2) return; - labels[i] = data[start + i][0].toString(); - for (int j = 1; j < data[start + i].length; j++) - values[i][j-1] = getDoubleValue(data[start + i][j]); + Object label = data[start + i][0]; + if (label != null) { + all_labels[i] = data[start + i][0].toString(); + for (int j = 1; j < data[start + i].length; j++) { + Double val = getDoubleValue(data[start + i][j]); + if (val != null) { + all_values[i][j-1] = val; + } else { + all_labels[i] = null; + break; + } + } + } + } + + double[][] values = new double[len][leny]; + String[] labels = new String[len]; + int len_trim = 0; + for (int i = 0; i < len; i++) { + if (all_labels[i] != null) { + labels[len_trim] = all_labels[i]; + for (int j = 0; j < leny; j++) { + values[len_trim][j] = all_values[i][j].doubleValue(); + } + len_trim++; + } + } + double[][] values_trim = new double[len_trim][leny]; + String[] labels_trim = new String[len_trim]; + for (int i = 0; i < len_trim; i++) { + labels_trim[i] = labels[i]; + for (int j = 0; j < leny; j++) { + values_trim[i][j] = values[i][j]; + } } - ((PieChart)this.chart).addPieChartSeries(labels, values); + ((PieChart)this.chart).addPieChartSeries(labels_trim, values_trim); chart.redraw(); } |