IDEMPIERE-6332 Implement MChart.getData to return the data used to paint the chart (#2579)
This commit is contained in:
parent
1522dd84d1
commit
e5f364f391
|
@ -23,6 +23,8 @@ package org.compiere.model;
|
|||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.sql.ResultSet;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
|
@ -30,12 +32,19 @@ import org.adempiere.apps.graph.ChartBuilder;
|
|||
import org.compiere.util.Env;
|
||||
import org.jfree.chart.ChartRenderingInfo;
|
||||
import org.jfree.chart.JFreeChart;
|
||||
import org.jfree.data.category.CategoryDataset;
|
||||
import org.jfree.data.general.Dataset;
|
||||
import org.jfree.data.general.PieDataset;
|
||||
import org.jfree.data.xy.XYDataset;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
public class MChart extends X_AD_Chart {
|
||||
/**
|
||||
* generated serial id
|
||||
*/
|
||||
private static final long serialVersionUID = 6510636131425272970L;
|
||||
private static final long serialVersionUID = -6709381648397609341L;
|
||||
|
||||
private int windowNo=0;
|
||||
|
||||
|
@ -116,4 +125,89 @@ public class MChart extends X_AD_Chart {
|
|||
return bi;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data from the chart on JSON format
|
||||
* @return
|
||||
*/
|
||||
public JsonObject getData() {
|
||||
JsonObject json = new JsonObject();
|
||||
ChartBuilder cb = new ChartBuilder(this);
|
||||
Dataset ds;
|
||||
JsonArray array = new JsonArray();
|
||||
String type = getChartType();
|
||||
if ( isTimeSeries()
|
||||
&& ( MChart.CHARTTYPE_BarChart.equals(type)
|
||||
|| MChart.CHARTTYPE_LineChart.equals(type)
|
||||
|| MChart.CHARTTYPE_StackedBarChart.equals(type)
|
||||
)
|
||||
) {
|
||||
ds = cb.getXYDataset();
|
||||
} else if ( MChart.CHARTTYPE_3DPieChart.equals(type)
|
||||
|| MChart.CHARTTYPE_PieChart.equals(type)
|
||||
|| MChart.CHARTTYPE_RingChart.equals(type)
|
||||
) {
|
||||
ds = cb.getPieDataset();
|
||||
} else {
|
||||
ds = cb.getCategoryDataset();
|
||||
}
|
||||
if (ds instanceof CategoryDataset) {
|
||||
json.addProperty("name", get_Translation(COLUMNNAME_Name));
|
||||
json.addProperty("domain-label", get_Translation(COLUMNNAME_DomainLabel));
|
||||
json.addProperty("range-label", get_Translation(COLUMNNAME_RangeLabel));
|
||||
json.addProperty("display-legend", isDisplayLegend());
|
||||
json.addProperty("orientation", getChartOrientation());
|
||||
CategoryDataset cds = (CategoryDataset) ds;
|
||||
int rowCount = cds.getRowCount();
|
||||
int columnCount = cds.getColumnCount();
|
||||
for (int row = 0; row < rowCount; row++) {
|
||||
for (int col = 0; col < columnCount; col++) {
|
||||
Number value = cds.getValue(row, col);
|
||||
Comparable<?> rowKey = cds.getRowKey(row);
|
||||
Comparable<?> colKey = cds.getColumnKey(col);
|
||||
JsonObject rec = new JsonObject();
|
||||
rec.addProperty("row", rowKey.toString());
|
||||
rec.addProperty("column", colKey.toString());
|
||||
rec.addProperty("value", value);
|
||||
array.add(rec);
|
||||
}
|
||||
}
|
||||
} else if (ds instanceof XYDataset) {
|
||||
json.addProperty("name", get_Translation(COLUMNNAME_Name));
|
||||
json.addProperty("domain-label", get_Translation(COLUMNNAME_DomainLabel));
|
||||
json.addProperty("range-label", get_Translation(COLUMNNAME_RangeLabel));
|
||||
json.addProperty("display-legend", isDisplayLegend());
|
||||
json.addProperty("orientation", getChartOrientation());
|
||||
XYDataset xyds = (XYDataset) ds;
|
||||
int seriesCount = xyds.getSeriesCount();
|
||||
for (int series = 0; series < seriesCount; series++) {
|
||||
Comparable<?> seriesKey = xyds.getSeriesKey(series);
|
||||
int itemCount = xyds.getItemCount(series);
|
||||
for (int item = 0; item < itemCount; item++) {
|
||||
Number xValue = xyds.getX(series, item);
|
||||
Date date = new Date((long) xValue);
|
||||
String strDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
|
||||
Number yValue = xyds.getY(series, item);
|
||||
JsonObject rec = new JsonObject();
|
||||
rec.addProperty("series", seriesKey.toString());
|
||||
rec.addProperty("x", strDate);
|
||||
rec.addProperty("y", yValue);
|
||||
array.add(rec);
|
||||
}
|
||||
}
|
||||
} else if (ds instanceof PieDataset) {
|
||||
json.addProperty("name", get_Translation(COLUMNNAME_Name));
|
||||
json.addProperty("display-legend", isDisplayLegend());
|
||||
PieDataset pds = (PieDataset) ds;
|
||||
for (int i = 0; i < pds.getKeys().size(); i++) {
|
||||
Comparable<?> key = pds.getKey(i);
|
||||
Number value = pds.getValue(key);
|
||||
JsonObject rec = new JsonObject();
|
||||
rec.addProperty("key", key.toString());
|
||||
rec.addProperty("value", value);
|
||||
array.add(rec);
|
||||
}
|
||||
}
|
||||
json.add("data", array);
|
||||
return json;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue