From c0573246421b14279af306c86279d85801164ba8 Mon Sep 17 00:00:00 2001
From: interestinglife
Date: Fri, 8 May 2020 23:44:38 +0800
Subject: [PATCH] =?UTF-8?q?[analysis]=E5=9B=BE=E8=A1=A8=E6=95=B0=E6=8D=AE?=
=?UTF-8?q?=E9=9B=86=E5=8F=82=E6=95=B0=E5=AE=9A=E4=B9=89=E7=94=B1ChartDefi?=
=?UTF-8?q?nition.dataSetParamValues=E6=94=B9=E8=87=B3ChartDataSet.paramVa?=
=?UTF-8?q?lues=EF=BC=8C=E8=BF=99=E6=A0=B7=E5=8F=AF=E4=BB=A5=E6=9B=B4?=
=?UTF-8?q?=E7=81=B5=E6=B4=BB=E5=9C=B0=E9=92=88=E5=AF=B9=E5=9B=BE=E8=A1=A8?=
=?UTF-8?q?=E7=9A=84=E6=AF=8F=E4=B8=AA=E6=95=B0=E6=8D=AE=E9=9B=86=E5=8D=95?=
=?UTF-8?q?=E7=8B=AC=E5=AE=9A=E4=B9=89=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/datagear/analysis/Chart.java | 1 -
.../org/datagear/analysis/ChartDataSet.java | 105 ++++++++++++-
.../datagear/analysis/ChartDefinition.java | 140 ++++++++----------
.../java/org/datagear/analysis/Dashboard.java | 28 ++--
.../java/org/datagear/analysis/DataSet.java | 2 +-
.../analysis/support/MapDataSetResult.java | 11 +-
.../analysis/support/SqlDataSetTest.java | 1 -
.../HtmlChartWidgetEntityServiceImpl.java | 6 +-
.../AbstractDataAnalysisController.java | 3 +-
.../script/datagear-dashboardFactory.js | 7 +-
10 files changed, 178 insertions(+), 126 deletions(-)
diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/Chart.java b/datagear-analysis/src/main/java/org/datagear/analysis/Chart.java
index fd8e11bf..020b52ba 100644
--- a/datagear-analysis/src/main/java/org/datagear/analysis/Chart.java
+++ b/datagear-analysis/src/main/java/org/datagear/analysis/Chart.java
@@ -37,7 +37,6 @@ public class Chart extends ChartDefinition
{
super(chartDefinition.getId(), chartDefinition.getName(), chartDefinition.getChartDataSets());
setChartParamValues(chartDefinition.getChartParamValues());
- setDataSetParamValues(chartDefinition.getDataSetParamValues());
setUpdateInterval(chartDefinition.getUpdateInterval());
this.plugin = plugin;
diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/ChartDataSet.java b/datagear-analysis/src/main/java/org/datagear/analysis/ChartDataSet.java
index 02a93f8e..7b48d9c4 100644
--- a/datagear-analysis/src/main/java/org/datagear/analysis/ChartDataSet.java
+++ b/datagear-analysis/src/main/java/org/datagear/analysis/ChartDataSet.java
@@ -7,13 +7,14 @@
*/
package org.datagear.analysis;
+import java.util.Collections;
import java.util.Map;
import java.util.Set;
/**
* 图表数据集。
*
- * 此类描述图表关联的某个{@linkplain DataSet}以及对其{@linkplain DataSet#getProperties()}设置的对应标记,这些标记通常是{@linkplain DataSign#getName()}。
+ * 此类描述图表关联的某个{@linkplain DataSet}信息。
*
*
* @author datagear@163.com
@@ -24,8 +25,16 @@ public class ChartDataSet
/** 数据集 */
private DataSet dataSet;
- /** 数据集属性-标记映射表 */
- private Map> propertySigns;
+ /** 数据集属性标记映射表 */
+ @SuppressWarnings("unchecked")
+ private Map> propertySigns = Collections.EMPTY_MAP;
+
+ /** 数据集别名 */
+ private String alias;
+
+ /** 数据集参数值映射表 */
+ @SuppressWarnings("unchecked")
+ private Map paramValues = Collections.EMPTY_MAP;
public ChartDataSet()
{
@@ -48,11 +57,12 @@ public class ChartDataSet
this.dataSet = dataSet;
}
- public boolean hasPropertySign()
- {
- return (this.propertySigns != null && !this.propertySigns.isEmpty());
- }
-
+ /**
+ * 获取数据集属性标记映射表,其关键字是{@linkplain #getDataSet()}的{@linkplain DataSetProperty#getName()}、
+ * 值则{@linkplain Chart#getPlugin()}的{@linkplain ChartPlugin#getDataSigns()}的{@linkplain DataSign#getName()}集合。
+ *
+ * @return
+ */
public Map> getPropertySigns()
{
return propertySigns;
@@ -62,4 +72,83 @@ public class ChartDataSet
{
this.propertySigns = propertySigns;
}
+
+ public boolean hasAlias()
+ {
+ return (this.alias != null && !this.alias.isEmpty());
+ }
+
+ /**
+ * 获取数据集别名。
+ *
+ * 一个图表可能多次包含同一个数据集,此别名可在图表展示时用于区分显示。
+ *
+ *
+ * @return 返回{@code null}或空表示无别名
+ */
+ public String getAlias()
+ {
+ return alias;
+ }
+
+ public void setAlias(String alias)
+ {
+ this.alias = alias;
+ }
+
+ public Map getParamValues()
+ {
+ return paramValues;
+ }
+
+ public void setParamValues(Map paramValues)
+ {
+ this.paramValues = paramValues;
+ }
+
+ /**
+ * {@linkplain #getResult()}是否可用。
+ *
+ * @return
+ */
+ public boolean isResultReady()
+ {
+ return this.dataSet.isReady(this.paramValues);
+ }
+
+ /**
+ * 获取{@linkplain #getDataSet()}的{@linkplain DataSetResult}。
+ *
+ * 调用此方法前应该确保{@linkplain #isResultReady()}返回{@code true}。
+ *
+ *
+ * @return
+ */
+ public DataSetResult getResult()
+ {
+ return this.dataSet.getResult(this.paramValues);
+ }
+
+ /**
+ * {@linkplain #getResult(Map)}是否可用。
+ *
+ * @return
+ */
+ public boolean isResultReady(Map paramValues)
+ {
+ return this.dataSet.isReady(paramValues);
+ }
+
+ /**
+ * 获取{@linkplain #getDataSet()}的{@linkplain DataSetResult}。
+ *
+ * 调用此方法前应该确保{@linkplain #isResultReady(Map)}返回{@code true}。
+ *
+ *
+ * @return
+ */
+ public DataSetResult getResult(Map paramValues)
+ {
+ return this.dataSet.getResult(paramValues);
+ }
}
diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/ChartDefinition.java b/datagear-analysis/src/main/java/org/datagear/analysis/ChartDefinition.java
index df4efaef..d6a8aa4e 100644
--- a/datagear-analysis/src/main/java/org/datagear/analysis/ChartDefinition.java
+++ b/datagear-analysis/src/main/java/org/datagear/analysis/ChartDefinition.java
@@ -9,6 +9,7 @@
package org.datagear.analysis;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -36,9 +37,6 @@ public class ChartDefinition extends AbstractIdentifiable
/** 图表参数值映射表 */
private Map chartParamValues = new HashMap<>();
- /** 数据集参数值映射表 */
- private Map dataSetParamValues = new HashMap<>();
-
/** 图表更新间隔毫秒数 */
private int updateInterval = -1;
@@ -84,16 +82,6 @@ public class ChartDefinition extends AbstractIdentifiable
this.chartParamValues = chartParamValues;
}
- public Map getDataSetParamValues()
- {
- return dataSetParamValues;
- }
-
- public void setDataSetParamValues(Map dataSetParamValues)
- {
- this.dataSetParamValues = dataSetParamValues;
- }
-
/**
* 获取图表更新间隔毫秒数。
*
@@ -133,83 +121,28 @@ public class ChartDefinition extends AbstractIdentifiable
}
/**
- * 获取图表数据集参数值。
+ * 获取指定索引的默认{@linkplain DataSetResult}。
*
- * @param name
- * @return
+ * @param index
+ * @return 如果{@linkplain ChartDataSet#isResultReady()}为{@code false},将返回{@code null}。
+ * @throws DataSetException
*/
- @SuppressWarnings("unchecked")
- public T getDataSetParamValue(String name)
+ public DataSetResult getDataSetResult(int index) throws DataSetException
{
- return (T) this.dataSetParamValues.get(name);
+ if (this.chartDataSets[index].isResultReady())
+ return this.chartDataSets[index].getResult();
+ else
+ return null;
}
/**
- * 设置图表数据集参数值。
+ * 获取默认{@linkplain DataSetResult}数组。
*
- * @param name
- * @param value
- */
- public void setDataSetParamValue(String name, Object value)
- {
- this.dataSetParamValues.put(name, value);
- }
-
- /**
- * {@linkplain #getDataSetParamValues()}是否满足执行{@linkplain #getDataSetResults()}。
- *
- * @return
- */
- public boolean isReadyForDataSetResults()
- {
- return isReadyForDataSetResults(this.dataSetParamValues);
- }
-
- /**
- * 给定参数集是否满足执行{@linkplain #getDataSetResults(Map)}。
- *
- * @param dataSetParamValues
- * @return
- */
- public boolean isReadyForDataSetResults(Map dataSetParamValues)
- {
- if (this.chartDataSets == null || this.chartDataSets.length == 0)
- return true;
-
- for (ChartDataSet chartDataSet : this.chartDataSets)
- {
- if (!chartDataSet.getDataSet().isReady(dataSetParamValues))
- return false;
- }
-
- return true;
- }
-
- /**
- * 获取此图表的所有{@linkplain DataSetResult}。
- *
- * 调用此方法前应该确保{@linkplain #isReadyForDataSetResults()}返回{@code true}。
- *
- *
- * @return
+ * @return 如果{@linkplain #getChartDataSets()}指定索引的{@linkplain ChartDataSet#isResultReady()}为{@code false},
+ * 返回数组对应元素将为{@code null}。
* @throws DataSetException
*/
public DataSetResult[] getDataSetResults() throws DataSetException
- {
- return getDataSetResults(this.dataSetParamValues);
- }
-
- /**
- * 获取此图表的所有{@linkplain DataSetResult}。
- *
- * 调用此方法前应该确保{@linkplain #isReadyForDataSetResults(Map)}返回{@code true}。
- *
- *
- * @param dataSetParamValues
- * @return
- * @throws DataSetException
- */
- public DataSetResult[] getDataSetResults(Map dataSetParamValues) throws DataSetException
{
if (this.chartDataSets == null || this.chartDataSets.length == 0)
return new DataSetResult[0];
@@ -217,7 +150,51 @@ public class ChartDefinition extends AbstractIdentifiable
DataSetResult[] results = new DataSetResult[this.chartDataSets.length];
for (int i = 0; i < this.chartDataSets.length; i++)
- results[i] = this.chartDataSets[i].getDataSet().getResult(dataSetParamValues);
+ results[i] = getDataSetResult(i);
+
+ return results;
+ }
+
+ /**
+ * 获取指定索引和参数的{@linkplain DataSetResult}。
+ *
+ * @param index
+ * @param dataSetParamValues 允许为{@code null}
+ * @return 如果{@code dataSetParamValues}为{@code null},或者{@linkplain ChartDataSet#isResultReady(Map)}为{@code false},将返回{@code null}。
+ * @throws DataSetException
+ */
+ public DataSetResult getDataSetResult(int index, Map dataSetParamValues) throws DataSetException
+ {
+ if (dataSetParamValues == null)
+ return null;
+ else if (this.chartDataSets[index].isResultReady(dataSetParamValues))
+ return this.chartDataSets[index].getResult(dataSetParamValues);
+ else
+ return null;
+ }
+
+ /**
+ * 获取指定参数的{@linkplain DataSetResult}数组。
+ *
+ * @param dataSetParamValuess 允许为{@code null}
+ * @return 如果{@code dataSetParamValuess}指定元素为{@code null},
+ * 或者{@linkplain #getChartDataSets()}指定索引的{@linkplain ChartDataSet#isResultReady(Map)}为{@code false},返回数组对应元素将为{@code null}。
+ * @throws DataSetException
+ */
+ public DataSetResult[] getDataSetResults(List extends Map> dataSetParamValuess) throws DataSetException
+ {
+ if (this.chartDataSets == null || this.chartDataSets.length == 0)
+ return new DataSetResult[0];
+
+ DataSetResult[] results = new DataSetResult[this.chartDataSets.length];
+
+ int pvSize = (dataSetParamValuess == null ? 0 : dataSetParamValuess.size());
+
+ for (int i = 0; i < this.chartDataSets.length; i++)
+ {
+ Map dataSetParamValues = (i >= pvSize ? null : dataSetParamValuess.get(i));
+ results[i] = getDataSetResult(i, dataSetParamValues);
+ }
return results;
}
@@ -240,7 +217,6 @@ public class ChartDefinition extends AbstractIdentifiable
to.setName(from.name);
to.setChartDataSets(from.chartDataSets);
to.setChartParamValues(from.chartParamValues);
- to.setDataSetParamValues(from.dataSetParamValues);
to.setUpdateInterval(from.updateInterval);
}
}
diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/Dashboard.java b/datagear-analysis/src/main/java/org/datagear/analysis/Dashboard.java
index 35cd975d..4dd9cca8 100644
--- a/datagear-analysis/src/main/java/org/datagear/analysis/Dashboard.java
+++ b/datagear-analysis/src/main/java/org/datagear/analysis/Dashboard.java
@@ -99,28 +99,21 @@ public class Dashboard extends AbstractIdentifiable
}
/**
- * 获取此看板所有无需参数的图表的数据集结果。
+ * 获取此看板所有图表的默认数据集结果。
*
- * @return
+ * @return 返回映射表的值数组元素可能为{@code null},具体参考{@linkplain ChartDefinition#getDataSetResults()}
* @throws DataSetException
*/
+ @SuppressWarnings("unchecked")
public Map getDataSetResults() throws DataSetException
{
+ if (this.charts == null || this.charts.isEmpty())
+ return Collections.EMPTY_MAP;
+
Map resultsMap = new HashMap<>();
- if (this.charts == null || this.charts.isEmpty())
- return resultsMap;
-
for (Chart chart : this.charts)
- {
- if (!chart.isReadyForDataSetResults())
- continue;
-
- DataSetResult[] results = chart.getDataSetResults();
-
- if (results != null)
- resultsMap.put(chart.getId(), results);
- }
+ resultsMap.put(chart.getId(), chart.getDataSetResults());
return resultsMap;
}
@@ -133,9 +126,8 @@ public class Dashboard extends AbstractIdentifiable
* @return
* @throws DataSetException
*/
- @SuppressWarnings("unchecked")
public Map getDataSetResults(Set chartIds,
- Map> dataSetParamValuess) throws DataSetException
+ Map>> dataSetParamValuess) throws DataSetException
{
Map resultsMap = new HashMap<>();
@@ -147,9 +139,7 @@ public class Dashboard extends AbstractIdentifiable
if (!chartIds.contains(chart.getId()))
continue;
- Map myParamValues = dataSetParamValuess.get(chart.getId());
- if (myParamValues == null)
- myParamValues = Collections.EMPTY_MAP;
+ List extends Map> myParamValues = dataSetParamValuess.get(chart.getId());
DataSetResult[] results = chart.getDataSetResults(myParamValues);
resultsMap.put(chart.getId(), results);
diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/DataSet.java b/datagear-analysis/src/main/java/org/datagear/analysis/DataSet.java
index e96ed27a..bdf9b7ee 100644
--- a/datagear-analysis/src/main/java/org/datagear/analysis/DataSet.java
+++ b/datagear-analysis/src/main/java/org/datagear/analysis/DataSet.java
@@ -74,7 +74,7 @@ public interface DataSet extends Identifiable
DataSetExport getExport(String name);
/**
- * 给定的参数映射表是否是为{@linkplain #getResult(Map)}准备好的。
+ * 给定的参数映射表是否可用于{@linkplain #getResult(Map)}。
*
* @param paramValues
* @return
diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/support/MapDataSetResult.java b/datagear-analysis/src/main/java/org/datagear/analysis/support/MapDataSetResult.java
index d11640ef..4d1fb2bc 100644
--- a/datagear-analysis/src/main/java/org/datagear/analysis/support/MapDataSetResult.java
+++ b/datagear-analysis/src/main/java/org/datagear/analysis/support/MapDataSetResult.java
@@ -7,11 +7,12 @@
*/
package org.datagear.analysis.support;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
-import org.datagear.analysis.DataSetResult;
import org.datagear.analysis.DataSetException;
+import org.datagear.analysis.DataSetResult;
/**
* 映射表{@linkplain DataSetResult}。
@@ -26,7 +27,8 @@ public class MapDataSetResult implements DataSetResult
{
private List